| ⊦ lifted(trlp)(trf, βf) ∧ pmon(trlp)(trf) → pcont(lift(trlp))(βf) |
lifted(trlp)(trf, βf), pmon(trlp)(trf), ¬ pcont(lift(trlp))(βf) ⊦
| lifted(trlp)(trf, βf), pmon(trlp)(trf), ¬ pcont(lift(trlp))(βf) ⊦ |
∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (# σ1 = # α1 + ⌜1⌝ ∧ # σ2 = # α2 + ⌜1⌝ ∧ σ1 ⊑ σ2 ∧ α1 ⊑ α2 ∧ lift(trlp)(σ1, α1) ∧ lift(trlp)(σ2, α2) → βf(σ1, α1) ⊑ βf(σ2, α2)) ∧ ppbd(lift(trlp))(βf)
Used simplifier rules: montrl-relative-def: ⊦ pmon(trlp)(trf) ↔ (∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2)); liftedtr-def: ⊦ lifted(trlp)(trf, βf) ↔ (∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α)); conttr-relative-def: ⊦ pcont(trp)(βf) ↔ pmon(trp)(βf) ∧ ppbd(trp)(βf); montr-relative-def: ⊦ pmon(trp)(βf) ↔ (∀ σ1, α1, σ2, α2. # σ1 = # α1 + ⌜1⌝ ∧ # σ2 = # α2 + ⌜1⌝ ∧ σ1 ⊑ σ2 ∧ α1 ⊑ α2 ∧ trp(σ1, α1) ∧ trp(σ2, α2) → βf(σ1, α1) ⊑ βf(σ2, α2));
| ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (# σ1 = # α1 + ⌜1⌝ ∧ # σ2 = # α2 + ⌜1⌝ ∧ σ1 ⊑ σ2 ∧ α1 ⊑ α2 ∧ lift(trlp)(σ1, α1) ∧ lift(trlp)(σ2, α2) → βf(σ1, α1) ⊑ βf(σ2, α2)) ∧ ppbd(lift(trlp))(βf) |
# σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
¬ ppbd(lift(trlp))(βf), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), lift(trlp)(σ2, α2) → lift(trf)(σ2, α2) = βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used terms: σ2, α2
| # σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), lift(trlp)(σ2, α2) → lift(trf)(σ2, α2) = βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), lift(trlp)(σ1, α1) → lift(trf)(σ1, α1) = βf(σ1, α1), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used terms: σ1, α1
| # σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), lift(trlp)(σ1, α1) → lift(trf)(σ1, α1) = βf(σ1, α1), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(σ1, α1) = βf(σ1, α1), lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # σ1 = # α1 + ⌜1⌝ , # σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(σ1, α1) = βf(σ1, α1), lift(trlp)(σ1, α1), lift(trlp)(σ2, α2), σ1 ⊑ σ2, α1 ⊑ α2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ1, α1) = βf(σ1, α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ1 = ⌜sl⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
# σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ1, α1) = βf(σ1, α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ1 = ⌜sf⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| # σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ1, α1) = βf(σ1, α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ1 = ⌜sl⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(σ2, α2), ⌜sl⌝ ⊑ σ2, α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| # σ2 = # α2 + ⌜1⌝ , lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(σ2, α2), ⌜sl⌝ ⊑ σ2, α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sl0⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ σ2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
# σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sf⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ σ2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| # σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sl0⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ σ2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
lift(trf)(⌜sl0⌝ , α2) = βf(⌜sl0⌝ , α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , ⌜# sl0⌝ = # α2 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(⌜sl0⌝ , α2), α1 ⊑ α2, sl ⊑ sl0, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sl0⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| lift(trf)(⌜sl0⌝ , α2) = βf(⌜sl0⌝ , α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , ⌜# sl0⌝ = # α2 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(⌜sl0⌝ , α2), α1 ⊑ α2, sl ⊑ sl0, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sl0⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(⌜sl0⌝ , α2) = βf(⌜sl0⌝ , α2), α2 = ⌜al⌝ , ⌜# sl0⌝ = # α2 + ⌜1⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl0⌝ , α2), lift(trlp)(⌜sl⌝ , α1), sl ⊑ sl0, α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sl0⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(⌜sl0⌝ , α2) = βf(⌜sl0⌝ , α2), α2 = ⌜al⌝ , ⌜# sl0⌝ = # α2 + ⌜1⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl0⌝ , α2), lift(trlp)(⌜sl⌝ , α1), sl ⊑ sl0, α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sl0⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# al + 1 = # sl0, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), lift(trlp)(⌜sl⌝ , α1), trlp(sl0, al), α1 ⊑ ⌜al⌝ , sl ⊑ sl0, ¬ βf(⌜sl⌝ , α1) ⊑ ⌜trf(sl0, al)⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ; lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| # al + 1 = # sl0, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), lift(trlp)(⌜sl⌝ , α1), trlp(sl0, al), α1 ⊑ ⌜al⌝ , sl ⊑ sl0, ¬ βf(⌜sl⌝ , α1) ⊑ ⌜trf(sl0, al)⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# al + 1 = # sl0, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), α1 = ⌜al0⌝ , ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), trlp(sl0, al), sl ⊑ sl0, α1 ⊑ ⌜al⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ ⌜trf(sl0, al)⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s)
| # al + 1 = # sl0, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), α1 = ⌜al0⌝ , ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), trlp(sl0, al), sl ⊑ sl0, α1 ⊑ ⌜al⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ ⌜trf(sl0, al)⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# al0 + 1 = # sl, # al + 1 = # sl0, ⌜trf(sl, al0)⌝ = βf(⌜sl⌝ , ⌜al0⌝ ), ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), trlp(sl, al0), trlp(sl0, al), sl ⊑ sl0, al0 ⊑ al, ¬ trf(sl, al0) ⊑ trf(sl0, al), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ; lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| # al0 + 1 = # sl, # al + 1 = # sl0, ⌜trf(sl, al0)⌝ = βf(⌜sl⌝ , ⌜al0⌝ ), ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), trlp(sl, al0), trlp(sl0, al), sl ⊑ sl0, al0 ⊑ al, ¬ trf(sl, al0) ⊑ trf(sl0, al), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
Used terms: sl, al0, sl0, al
| # σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sf⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ σ2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# α2 = ∞, lift(trf)(⌜sf⌝ , α2) = βf(⌜sf⌝ , α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(⌜sf⌝ , α2), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| # α2 = ∞, lift(trf)(⌜sf⌝ , α2) = βf(⌜sf⌝ , α2), lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), lift(trlp)(⌜sf⌝ , α2), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ α2, ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# α2 = ∞, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(⌜sf⌝ , α2) = βf(⌜sf⌝ , α2), α2 = ⌜af⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sf⌝ , α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| # α2 = ∞, lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lift(trf)(⌜sf⌝ , α2) = βf(⌜sf⌝ , α2), α2 = ⌜af⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sf⌝ , α2), lift(trlp)(⌜sl⌝ , α1), α1 ⊑ α2, ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: lifttr-inf: ⊦ lift(trf)(⌜sf⌝ , ⌜af⌝ ) = lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ); lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n))); ⊦ # ⌜nf⌝ = ∞; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n)))
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n))), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used terms: ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n))) |
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n))), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) → (∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ )) ∧ (∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n)))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) → (∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ )) ∧ (∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n)))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1))
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n + 1)) ⊦
Used terms: ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1)) |
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n + 1)) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜nf⌝ (n) = nf(n); (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), # sf.take(n + 1) = # af.take(n) + 1 ∧ # sf.take(2 + n) = # af.take(n + 1) + 1 ∧ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used terms: sf.take(n + 1), af.take(n), sf.take(2 + n), af.take(n + 1)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), # sf.take(n + 1) = # af.take(n) + 1 ∧ # sf.take(2 + n) = # af.take(n + 1) + 1 ∧ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1))
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ # nf.take(n) = n; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ af.take(n) ⊑ af.take(n + 1), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ sf.take(n + 1) ⊑ sf.take(2 + n), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ trlp(sf.take(2 + n), af.take(n + 1)), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ af.take(n) ⊑ af.take(n + 1), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ # x0 = # x1 → (x0 ⊑ x1 + x2 ↔ x0 = x1); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: af, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ sf.take(n + 1) ⊑ sf.take(2 + n), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
⊦ nf.take(m + 2) = nf.take(m + 1) + nf(m + 1) '
Used simplifier rules: ⊦ # x0 = # x1 → (x0 ⊑ x1 + x2 ↔ x0 = x1); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: sf, n
| ⊦ nf.take(m + 2) = nf.take(m + 1) + nf(m + 1) ' |
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
Used terms: n
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ trlp(sf.take(2 + n), af.take(n + 1)), ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic Used terms: n + 1
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), α1 ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), α1 = ⌜al⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s)
| lift(trf)(⌜sl⌝ , α1) = βf(⌜sl⌝ , α1), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), α1 = ⌜al⌝ , ⌜# sl⌝ = # α1 + ⌜1⌝ , lift(trlp)(⌜sl⌝ , α1), ⌜sl⌝ ⊑ ⌜sf⌝ , α1 ⊑ ⌜af⌝ , ¬ βf(⌜sl⌝ , α1) ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
# al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used simplifier rules: lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ; lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
# al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜al⌝ ⊑ ⌜af⌝ , ⌜trf(sf.take(# al + 1), af.take(# al))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used terms: # al
| # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜al⌝ ⊑ ⌜af⌝ , ⌜trf(sf.take(# al + 1), af.take(# al))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
# al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜trf(sf.take(# sl), af.take(# al))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ⌜al⌝ ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
| # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜trf(sf.take(# sl), af.take(# al))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ⌜al⌝ ⊑ ⌜af⌝ , ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
# al0 = # al, # al + 1 = # sl, af = (⌜al0⌝ + ⌜nf0⌝ ).f, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜al⌝ ⊑ ⌜af⌝ , ⌜trf(sf.take(# sl), al0)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, # al, al0, nf0
| # al0 = # al, # al + 1 = # sl, af = (⌜al0⌝ + ⌜nf0⌝ ).f, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜al⌝ ⊑ ⌜af⌝ , ⌜trf(sf.take(# sl), al0)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
# al0 = # al, # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜trf(sf.take(# sl), al0)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), (al0 + nf0).take(n)), ∀ m. ¬ # βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf(sf.take(n + 1), (al0 + nf0).take(n))) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| # al0 = # al, # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜sl⌝ ⊑ ⌜sf⌝ , ⌜trf(sf.take(# sl), al0)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), (al0 + nf0).take(n)), ∀ m. ¬ # βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf(sf.take(n + 1), (al0 + nf0).take(n))) ⊦ |
# al0 = # al, # sl0 = # sl, # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), sf = (⌜sl0⌝ + ⌜sf0⌝ ).f, ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf(sf.take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp(sf.take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: sf, # sl, sl0, sf0
| # al0 = # al, # sl0 = # sl, # al + 1 = # sl, lim(⌜λ n. ⌜trf(sf.take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), sf = (⌜sl0⌝ + ⌜sf0⌝ ).f, ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜sl⌝ ⊑ ⌜sf⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf(sf.take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp(sf.take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl0 = # sl, # al0 = # al, # al + 1 = # sl, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜sl⌝ ⊑ ⌜sl0⌝ + ⌜sf0⌝ , ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| # sl0 = # sl, # al0 = # al, # al + 1 = # sl, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜sl⌝ ⊑ ⌜sl0⌝ + ⌜sf0⌝ , ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# al0 = # al, # sl0 = # sl, # al + 1 = # sl, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∃ σ1. ⌜sl⌝ + σ1 = ⌜sl0⌝ + ⌜sf0⌝ ⊦
Used terms: ⌜sl⌝ , ⌜sl0⌝ + ⌜sf0⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # al0 = # al, # sl0 = # sl, # al + 1 = # sl, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl, al)⌝ = βf(⌜sl⌝ , ⌜al⌝ ), trlp(sl, al), ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∃ σ1. ⌜sl⌝ + σ1 = ⌜sl0⌝ + ⌜sf0⌝ ⊦ |
# al0 = # al, # al + 1 = # sl0, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), trlp(sl0, al), ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl0, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s)
| # al0 = # al, # al + 1 = # sl0, lim(⌜λ n. ⌜trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))⌝ ⌝ ) = βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜trf(sl0, al)⌝ = βf(⌜sl0⌝ , ⌜al⌝ ), trlp(sl0, al), ⌜trf(sl0, al0)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ¬ ⌜trf(sl0, al)⌝ ⊑ βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ), ∀ m. ¬ # βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sl0⌝ + ⌜sf0⌝ , ⌜al0⌝ + ⌜nf0⌝ ).take(m) ⊑ trf((sl0 + sf0).take(n + 1), (al0 + nf0).take(n))), ∀ n. trlp((sl0 + sf0).take(n + 1), (al0 + nf0).take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Used simplifier rules: ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜al⌝ , ⌜al0⌝ + ⌜nf0⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ2 = # α2 + ⌜1⌝ , # σ1 = # α1 + ⌜1⌝ , lift(trf)(σ1, α1) = βf(σ1, α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ1 = ⌜sf⌝ , lift(trlp)(σ2, α2), lift(trlp)(σ1, α1), α1 ⊑ α2, σ1 ⊑ σ2, ¬ βf(σ1, α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# σ2 = # α2 + ⌜1⌝ , # α1 = ∞, lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(⌜sf⌝ , α1) = βf(⌜sf⌝ , α1), lift(trlp)(⌜sf⌝ , α1), lift(trlp)(σ2, α2), ⌜sf⌝ ⊑ σ2, α1 ⊑ α2, ¬ βf(⌜sf⌝ , α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| # σ2 = # α2 + ⌜1⌝ , # α1 = ∞, lift(trf)(σ2, α2) = βf(σ2, α2), lift(trf)(⌜sf⌝ , α1) = βf(⌜sf⌝ , α1), lift(trlp)(⌜sf⌝ , α1), lift(trlp)(σ2, α2), ⌜sf⌝ ⊑ σ2, α1 ⊑ α2, ¬ βf(⌜sf⌝ , α1) ⊑ βf(σ2, α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# α1 = ∞, # σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sf⌝ , α1) = βf(⌜sf⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sf0⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sf⌝ , α1), α1 ⊑ α2, ⌜sf⌝ ⊑ σ2, ¬ βf(⌜sf⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ¬ ⌜nf⌝ ⊑ ⌜x⌝ ; (s)
| # α1 = ∞, # σ2 = # α2 + ⌜1⌝ , lift(trf)(⌜sf⌝ , α1) = βf(⌜sf⌝ , α1), lift(trf)(σ2, α2) = βf(σ2, α2), σ2 = ⌜sf0⌝ , lift(trlp)(σ2, α2), lift(trlp)(⌜sf⌝ , α1), α1 ⊑ α2, ⌜sf⌝ ⊑ σ2, ¬ βf(⌜sf⌝ , α1) ⊑ βf(σ2, α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# α2 = ∞, # α1 = ∞, lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), lift(trf)(⌜sf0⌝ , α2) = βf(⌜sf0⌝ , α2), lift(trlp)(⌜sf0⌝ , α2), lift(trlp)(⌜sf0⌝ , α1), α1 ⊑ α2, ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ ⊑ ⌜nf0⌝ ↔ nf = nf0; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| # α2 = ∞, # α1 = ∞, lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), lift(trf)(⌜sf0⌝ , α2) = βf(⌜sf0⌝ , α2), lift(trlp)(⌜sf0⌝ , α2), lift(trlp)(⌜sf0⌝ , α1), α1 ⊑ α2, ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , α2), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ |
# α1 = ∞, # α2 = ∞, lift(trf)(⌜sf0⌝ , α2) = βf(⌜sf0⌝ , α2), lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), α2 = ⌜af⌝ , lift(trlp)(⌜sf0⌝ , α1), lift(trlp)(⌜sf0⌝ , α2), α1 ⊑ α2, ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| # α1 = ∞, # α2 = ∞, lift(trf)(⌜sf0⌝ , α2) = βf(⌜sf0⌝ , α2), lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), α2 = ⌜af⌝ , lift(trlp)(⌜sf0⌝ , α1), lift(trlp)(⌜sf0⌝ , α2), α1 ⊑ α2, ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , α2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# α1 = ∞, lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), lim(⌜λ n. ⌜trf(sf0.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf0⌝ , ⌜af⌝ ), lift(trlp)(⌜sf0⌝ , α1), α1 ⊑ ⌜af⌝ , ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , ⌜af⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf0.take(n + 1), af.take(n)) ⊦
Used simplifier rules: lifttr-inf: ⊦ lift(trf)(⌜sf⌝ , ⌜af⌝ ) = lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ); lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n))); ⊦ # ⌜nf⌝ = ∞; (s)
| # α1 = ∞, lift(trf)(⌜sf0⌝ , α1) = βf(⌜sf0⌝ , α1), lim(⌜λ n. ⌜trf(sf0.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf0⌝ , ⌜af⌝ ), lift(trlp)(⌜sf0⌝ , α1), α1 ⊑ ⌜af⌝ , ¬ βf(⌜sf0⌝ , α1) ⊑ βf(⌜sf0⌝ , ⌜af⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf0.take(n + 1), af.take(n)) ⊦ |
Used simplifier rules: lifttr-inf: ⊦ lift(trf)(⌜sf⌝ , ⌜af⌝ ) = lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ); lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n))); Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜nf⌝ ⊑ ⌜nf0⌝ ↔ nf = nf0; (s) ⊦ σ ⊑ σ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| ¬ ppbd(lift(trlp))(βf), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ ppbd(trp)(βf) ↔ (∀ sf, af, bl. trp(⌜sf⌝ , ⌜af⌝ ) → ((∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ ))
∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∃ sf, af, bl. ¬(lift(trlp)(⌜sf⌝ , ⌜af⌝ ) → ((∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ )) ⊦
Used terms: lift(trlp), βf
| ⊦ ppbd(trp)(βf) ↔ (∀ sf, af, bl. trp(⌜sf⌝ , ⌜af⌝ ) → ((∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ )) |
| ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∃ sf, af, bl. ¬(lift(trlp)(⌜sf⌝ , ⌜af⌝ ) → ((∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ )) ⊦ |
∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used simplifier rules: lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n)));
| ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n)))
mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n))), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used terms: ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n))) |
| mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n))), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) → (∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n)))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) → (∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n)))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
| ¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1))
∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n + 1)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used terms: ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1)) |
| ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ → ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n) ⊑ ⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ (n + 1)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜nf⌝ (n) = nf(n); (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), # sf.take(n + 1) = # af.take(n) + 1 ∧ # sf.take(2 + n) = # af.take(n + 1) + 1 ∧ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
Used terms: sf.take(n + 1), af.take(n), sf.take(2 + n), af.take(n + 1)
| ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), # sf.take(n + 1) = # af.take(n) + 1 ∧ # sf.take(2 + n) = # af.take(n + 1) + 1 ∧ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1))
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ # nf.take(n) = n; (s)
| ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) ∧ trlp(sf.take(n + 1), af.take(n)) ∧ trlp(sf.take(2 + n), af.take(n + 1)) |
¬ af.take(n) ⊑ af.take(n + 1), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
¬ sf.take(n + 1) ⊑ sf.take(2 + n), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
¬ trlp(sf.take(n + 1), af.take(n)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
¬ trlp(sf.take(2 + n), af.take(n + 1)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝
| ¬ af.take(n) ⊑ af.take(n + 1), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ # x0 = # x1 → (x0 ⊑ x1 + x2 ↔ x0 = x1); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: af, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ¬ sf.take(n + 1) ⊑ sf.take(2 + n), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
⊦ nf.take(m + 2) = nf.take(m + 1) + nf(m + 1) '
Used simplifier rules: ⊦ # x0 = # x1 → (x0 ⊑ x1 + x2 ↔ x0 = x1); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: sf, n
| ⊦ nf.take(m + 2) = nf.take(m + 1) + nf(m + 1) ' |
| ¬ trlp(sf.take(n + 1), af.take(n)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
Used terms: n
| ¬ trlp(sf.take(2 + n), af.take(n + 1)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic Used terms: n + 1
| ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ (∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ |
¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝
| ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , lift(trlp)(⌜sf⌝ , ⌜af⌝ ) → lift(trf)(⌜sf⌝ , ⌜af⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used terms: ⌜sf⌝ , ⌜af⌝
| ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , lift(trlp)(⌜sf⌝ , ⌜af⌝ ) → lift(trf)(⌜sf⌝ , ⌜af⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used simplifier rules: lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n))); lifttr-inf: ⊦ lift(trf)(⌜sf⌝ , ⌜af⌝ ) = lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ );
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , ¬ bl0 ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ m. ¬ # bl0 < m → (∃ n. bl0.take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , ¬ bl0 ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ m. ¬ # bl0 < m → (∃ n. bl0.take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , ¬ bl0 ⊑ bl, ¬ # bl0 < # bl0 → (∃ n. bl0.take(# bl0) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used terms: # bl0
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , ¬ bl0 ⊑ bl, ¬ # bl0 < # bl0 → (∃ n. bl0.take(# bl0) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , bl0 ⊑ trf(sf.take(n + 1), af.take(n)), ¬ bl0 ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0 ⊦
Used simplifier rules: ⊦ # x = n → x.take(n) = x; (s) ⊦ ¬ n < n; (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , bl0 ⊑ trf(sf.take(n + 1), af.take(n)), ¬ bl0 ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0 ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , bl0 ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ¬ bl0 ⊑ bl, ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used terms: n
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bl0⌝ , bl0 ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ¬ bl0 ⊑ bl, ∀ n. trf(sf.take(n + 1), af.take(n)) ⊑ bl0, ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used simplifier rules: ⊦ # x0 = # x1 → (x0 ⊑ x1 ↔ x0 = x1); (s) ⊦ x ⊑ y → (y ⊑ x ↔ x = y); (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦
Used terms: n
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used terms: ⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ;
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜trf(sf.take(n + 1), af.take(n))⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n0. trf(sf.take(n0 + 1), af.take(n0)) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ⊦ |
Used terms: n
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = βf(⌜sf⌝ , ⌜af⌝ ), lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , ¬ βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ βf(⌜sf⌝ , ⌜af⌝ ), ∀ m. ¬ # βf(⌜sf⌝ , ⌜af⌝ ) < ⌜m⌝ → (∃ n. βf(⌜sf⌝ , ⌜af⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ m. ∃ n. bf.take(m) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ¬ ⌜nf⌝ ⊑ ⌜x⌝ ; (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ m. ∃ n. bf.take(m) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∃ n. bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦
Used terms: # bl + 1
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∃ n. bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used terms: n
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
Used terms: ⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ;
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ¬ trlp(sf.take(n + 1), af.take(n)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ¬ trlp(sf.take(n + 1), af.take(n)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
Used terms: n
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
Used simplifier rules: prefix-trans: ⊦ x ⊑ y ∧ y ⊑ z → x ⊑ z; (forward) from specification list-last ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), trf(sf.take(n + 1), af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ z. bf.take(# bl + 1) + z = bl ⊦
Used terms: bf.take(# bl + 1), bl
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), trf(sf.take(n + 1), af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∃ z. bf.take(# bl + 1) + z = bl ⊦ |
bf.take(# bl + 1) + bl0 = bl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
| bf.take(# bl + 1) + bl0 = bl, lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) = ⌜bf⌝ , βf(⌜sf⌝ , ⌜af⌝ ) = ⌜bf⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), bf.take(# bl + 1) ⊑ trf(sf.take(n + 1), af.take(n)), trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
Used simplifier rules: ⊦ #(x + y) = # x + # y; (s) ⊦ # nf.take(n) = n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: bf.take(# bl + 1) + bl0, bl
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ ∀ n. βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ |
βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
| βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used terms: n
| βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used terms: ⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝
| ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , lift(trlp)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) → lift(trf)(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦
Used simplifier rules: lift-trp-fin: ⊦ lift(trlp)(⌜sl⌝ , ⌜al⌝ ) ↔ trlp(sl, al); lifttr-fin: ⊦ lift(trf)(⌜sl⌝ , ⌜al⌝ ) = ⌜trf(sl, al)⌝ ;
| βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , trlp(sf.take(n + 1), af.take(n)) → ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ n. trlp(sf.take(n + 1), af.take(n)) ⊦ |
⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
| ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ trlp(sf.take(n + 1), af.take(n)), ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
Used terms: n
| ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ , ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| ⌜trf(sf.take(n + 1), af.take(n))⌝ = βf(⌜sf.take(n + 1)⌝ , ⌜af.take(n)⌝ ), ⌜trf(sf.take(n + 1), af.take(n))⌝ ⊑ lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), βf(⌜sf⌝ , ⌜af⌝ ) ⊑ ⌜bl⌝ , ¬ trf(sf.take(n + 1), af.take(n)) ⊑ bl, ∀ n. trlp(sf.take(n + 1), af.take(n)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 ∧ trlp(sl1, al1) ∧ trlp(sl2, al2) → trf(sl1, al1) ⊑ trf(sl2, al2), ∀ σ, α. lift(trlp)(σ, α) → lift(trf)(σ, α) = βf(σ, α), ∀ m. ¬ # lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ).take(m) ⊑ trf(sf.take(n + 1), af.take(n))) ⊦ |
Used simplifier rules: lift-trp-inf: ⊦ lift(trlp)(⌜sf⌝ , ⌜af⌝ ) ↔ (∀ n. trlp(sf.take(n + 1), af.take(n))); lifttr-inf: ⊦ lift(trf)(⌜sf⌝ , ⌜af⌝ ) = lim(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ); leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) Used terms: ⌜sf⌝ , ⌜af⌝
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.