| ⊦ mon(trf) ↔ (∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) |
⊦ mon(trf) ↔ (∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2))
⊦ (∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2)) ↔ (∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ))
Used terms: trf
| ⊦ mon(trf) ↔ (∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2)) |
| ⊦ (∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2)) ↔ (∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )) |
∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ ∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ )
∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ⊦ ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2)
| ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ ∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) |
¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| ¬ mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1))
∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2), ∃ 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)) |
| ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2), ∃ 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)) ⊦ |
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
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)), ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
¬ 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) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n + 1)) ⊦
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) → trf(sf.take(n + 1), af.take(n)) ⊑ trf(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)) ⊦ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n)
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)) ⊦ af.take(n) ⊑ af.take(n + 1) ∧ sf.take(n + 1) ⊑ sf.take(2 + n) |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n) + af(n) ') ⊦ af.take(n) ⊑ af.take(n) + af(n) ' ∧ sf.take(n + 1) ⊑ sf.take(2 + n)
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: af, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n) + af(n) ') ⊦ af.take(n) ⊑ af.take(n) + af(n) ' ∧ sf.take(n + 1) ⊑ sf.take(2 + n) |
¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n) + af(n) '), ¬ sf.take(n + 1) ⊑ sf.take(2 + n) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # x0 = # x1 → (x0 ⊑ x1 + x2 ↔ x0 = x1); (s)
| ¬ trf(sf.take(n + 1), af.take(n)) ⊑ trf(sf.take(2 + n), af.take(n) + af(n) '), ¬ sf.take(n + 1) ⊑ sf.take(2 + 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 a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: sf, n
| ⊦ nf.take(m + 2) = nf.take(m + 1) + nf(m + 1) ' |
| ∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ⊦ ∀ sl1, al1, sl2, al2. # sl1 = # al1 + 1 ∧ # sl2 = # al2 + 1 ∧ al1 ⊑ al2 ∧ sl1 ⊑ sl2 → trf(sl1, al1) ⊑ trf(sl2, al2) |
# sl1 = # al1 + 1, # sl2 = # al2 + 1, al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ⊦
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∀ sf, af. mon(⌜λ n. ⌜trf(sf.take(n + 1), af.take(n))⌝ ⌝ ) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used terms: λ n. (n < # sl2 ⊃ sl2(n);s), λ n. (n < # al2 ⊃ al2(n);a)
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
# sl1 = # al1 + 1, # sl2 = # al2 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ (# al1) ⊑ ⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ (# al2), ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ # y < # x → ¬ x ⊑ y; (s) Used terms: ⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n)) ⌝ ⌝ , # al1, # al2
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ (# al1) ⊑ ⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ (# al2), ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) ⊑ trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s)
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) ⊑ trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
# sl1 = # al1 + 1, # sl2 = # al2 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + z = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)) ⊦
Used terms: trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)), trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2))
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + z = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) ≠ sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used formulas: (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) ≠ al2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used formulas: (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used formulas: (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
Used formulas: (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, al1) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, al1) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
# sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, al1) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ∀ z. trf(sl1, al1) + z ≠ trf(sl2, al2) ⊦
Used terms: trf(sl1, al1), trf(sl2, al2)
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, al1) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) = al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ∀ z. trf(sl1, al1) + z ≠ trf(sl2, al2) ⊦ |
Used terms: bl
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. al1 + z = al2 ⊦
Used terms: al1, al2
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf(sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. al1 + z = al2 ⊦ |
# sl1 = # al1 + 1, # sl2 = (# al1 + # al) + 1, trf(sl1, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1)) + bl = trf(sl2, al1 + al), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1 + # al) = al1 + al, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al1 + al) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # sl1 = # al1 + 1, # sl2 = (# al1 + # al) + 1, trf(sl1, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1)) + bl = trf(sl2, al1 + al), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1 + # al) = al1 + al, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) = sl1, (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1) ≠ al1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(n))⌝ ⌝ ), sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al1 + al) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m < n → (n ≤ m ↔ false); (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ n < # x → (x + y)(n) = x(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (λ n. (n < # al1 + # al ⊃ (al1 + al)(n);a)).take(# al1), al1
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
# sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. sl1 + z = sl2 ⊦
Used terms: sl1, sl2
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| # sl2 = # al2 + 1, # sl1 = # al1 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2), ∃ z. sl1 + z = sl2 ⊦ |
# sl1 = # al1 + 1, # sl1 + # sl = # al2 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2) ⊦
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 + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s)
| # sl1 = # al1 + 1, # sl1 + # sl = # al2 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1) ≠ sl1, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
# sl1 = # al1 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), # sl1 + # sl = # al2 + 1, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2), # sl1 ≠ # (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1) ∨ (∃ n. ¬(n < # sl1 → sl1(n) = (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1)(n))) ⊦
Used terms: (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), sl1
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| # sl1 = # al1 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), # sl1 + # sl = # al2 + 1, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2), # sl1 ≠ # (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1) ∨ (∃ n. ¬(n < # sl1 → sl1(n) = (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1)(n))) ⊦ |
# sl1 = # al1 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), # sl1 + # sl = # al2 + 1, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, sl1(n) ≠ (¬ # al2 < n ⊃ sl1(n);s), sl1 ≠ [], n < # sl1, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), n ≤ # al1, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ # x = 0 ↔ x = []; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ n < # x → (x + y)(n) = x(n); (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ # nf.take(n) = n; (s)
| # sl1 = # al1 + 1, trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl1 + sl, al2), # sl1 + # sl = # al2 + 1, (λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(# al2 + 1) = sl1 + sl, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) = al2, sl1(n) ≠ (¬ # al2 < n ⊃ sl1(n);s), sl1 ≠ [], n < # sl1, mon(⌜λ n. ⌜trf((λ n. (¬ # al2 < n ⊃ (sl1 + sl)(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), n ≤ # al1, al1 ⊑ al2, ¬ trf(sl1, al1) ⊑ trf(sl1 + sl, al2) ⊦ |
Used simplifier rules: eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m.+1 < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ m.+1 = m + 1; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # y < # x → ¬ x ⊑ y; (s)
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf(sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) = sl2, (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2) ≠ al2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) Used terms: (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2), al2
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| # sl1 = # al1 + 1, # sl2 = # al2 + 1, trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl1), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al1)) + bl = trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), (λ n. (n < # al2 ⊃ al2(n);a)).take(# al2)), (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2) ≠ sl2, mon(⌜λ n. ⌜trf((λ n. (n < # sl2 ⊃ sl2(n);s)).take(n + 1), (λ n. (n < # al2 ⊃ al2(n);a)).take(n))⌝ ⌝ ), al1 ⊑ al2, sl1 ⊑ sl2, ¬ trf(sl1, al1) ⊑ trf(sl2, al2) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) Used terms: (λ n. (n < # sl2 ⊃ sl2(n);s)).take(# sl2), sl2
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
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.