| ⊦ stutf(nσ) ∧ nσ(n + 1) = nσ(n) + 1 ∧ ⌜n⌝ + ⌜1⌝ < # nσ → inv(nσ)(nσ(n)) = n |
nσ(n + 1) = nσ(n) + 1, inv(nσ)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
| nσ(n + 1) = nσ(n) + 1, inv(nσ)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
nσ(n + 1) = nσ(n) + 1, inv(nσ)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
| nσ(n + 1) = nσ(n) + 1, inv(nσ)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ stutf(nσ) → inv(nσ) = (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ )
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used terms: nσ
| ⊦ stutf(nσ) → inv(nσ) = (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) |
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used formulas: max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, ⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: leninv-inf-strong: ⊦ stutf(nσ) → ( leninv(nσ) = ∞ ↔ # nσ = ∞ ∧ (∀ m. ∃ m0. m < m0 ∧ nσ(m) < nσ(m0)) ∧ (∀ m. ∃ m0. m < nσ(m0))); ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ ⌜n⌝ .n = n; (s)
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, ⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ ⌜x⌝ (n) = x(n); (s)
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ n∞ ≠ ∞ → (n = n∞.n ↔ n∞ = ⌜n⌝ ); (elim) Used terms: leninv(nσ), n1
| leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, leninv(nσ) ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ ⌜n⌝ ≠ ∞; (s)
| leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = 0, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = n2.+1, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: Nat freely generated by 0, +1;
| leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = 0, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
leninv(nσ) = ⌜0⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, [](nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ nf.take(0) = []; (s)
| leninv(nσ) = ⌜0⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, [](nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ stutf(nσ) → (leninv(nσ) = ⌜0⌝ ↔ nσ = ⌜λ n. 0⌝ )
Used simplifier rules: ⊦ ⌜nf⌝ (n) = nf(n); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: nσ
| ⊦ stutf(nσ) → (leninv(nσ) = ⌜0⌝ ↔ nσ = ⌜λ n. 0⌝ ) |
| leninv(nσ) = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = n2.+1, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
leninv(nσ) = ⌜n2⌝ + ⌜1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ m.+1 = m + 1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| leninv(nσ) = ⌜n2⌝ + ⌜1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ stutf(nσ) → (leninv(nσ) = ⌜n⌝ + ⌜1⌝ ↔ (# nσ = ∞ ⊃ ∃ m. nσ(m) = n ∧ (∀ m0. m < m0 → nσ(m0) = n + 1);nσ((# nσ).n - 1) = n))
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (# nσ = ∞ ⊃ ∃ m. nσ(m) = n2 ∧ (∀ m0. m < m0 → nσ(m0) = n2 + 1);nσ((# nσ).n - 1) = n2) ⊦
Used terms: n2, nσ
| ⊦ stutf(nσ) → (leninv(nσ) = ⌜n⌝ + ⌜1⌝ ↔ (# nσ = ∞ ⊃ ∃ m. nσ(m) = n ∧ (∀ m0. m < m0 → nσ(m0) = n + 1);nσ((# nσ).n - 1) = n)) |
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (# nσ = ∞ ⊃ ∃ m. nσ(m) = n2 ∧ (∀ m0. m < m0 → nσ(m0) = n2 + 1);nσ((# nσ).n - 1) = n2) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (# nσ = ∞ ⊃ nσ(m) = n2 ∧ (∀ m0. m < m0 → nσ(m0) = nσ(m) + 1);nσ((# nσ).n - 1) = n2) ⊦
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (# nσ = ∞ ⊃ nσ(m) = n2 ∧ (∀ m0. m < m0 → nσ(m0) = nσ(m) + 1);nσ((# nσ).n - 1) = n2) ⊦ |
# nσ = ∞, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, nσ(m) = n2, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, nσ((# nσ).n - 1) = n2, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
| # nσ = ∞, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, nσ(m) = n2, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
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 ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) ⊦ ⌜m⌝ < ∞; (s)
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
Used terms: n
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, m < n, stutf(nσ), m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), ¬ m < n, m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
Used formulas: m < n
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, m < n, stutf(nσ), m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n) = nσ(m) + 1, nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(n))(nσ(n)) ≠ n, m < n, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(n) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n) = nσ(m) + 1, nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(n))(nσ(n)) ≠ n, m < n, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(n) ⊦ |
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n → ¬ n < m; (s) eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ m = m + n ↔ n = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n + 1
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, stutf(nσ), ¬ m < n, m < n → nσ(n) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), m < n + 1 → nσ(n + 1) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
Used terms: n + 1
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), m < n + 1 → nσ(n + 1) = nσ(m) + 1, ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1, ¬ n < m → nσ(n) = nσ(m) ⊦
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) ⊦ m < n + 1 ↔ ¬ n < m; (s)
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1, ¬ n < m → nσ(n) = nσ(m) ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, n < m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1, ¬ n < m → nσ(n) = nσ(m) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ ⌜n⌝ .n = n; (s) Used formulas: n < m
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n ≤ m, n < m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1, ¬ n < m → nσ(n) = nσ(m) ⊦ |
# nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n < m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| # nσ = ∞, max∞(λ n0. nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m0. max∞(λ n0. nσ(n0) = m0).n).take(nσ(m) + 1)(nσ(n)) ≠ n, n < m, stutf(nσ), ∀ m0. m < m0 → nσ(m0) = nσ(m) + 1 ⊦ |
⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n)
Used simplifier rules: stutf-monle: ⊦ stutf(nσ) → (mon≤(nσ) ↔ true); ⊦ m < n → m ≤ n; (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ ⌜n⌝ .n = n; (s) Used terms: nσ, n, m
| ⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n) |
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, nσ((# nσ).n - 1) = n2, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(n2 + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(nσ((# nσ).n - 1) + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(nσ((# nσ).n - 1) + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
# nσ = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(nσ(n1 - 1) + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ n∞ ≠ ∞ → (n = n∞.n ↔ n∞ = ⌜n⌝ ); (elim) Used terms: # nσ, n1
| # nσ = ⌜n1⌝ , max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, # nσ ≠ ∞, (λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(nσ(n1 - 1) + 1)(nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
# nσ = ⌜n1⌝ , max∞(λ n0. n0 < n1 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. n0 < n1 ∧ nσ(n0) = m).n).take(nσ(n1 - 1) + 1)(nσ(n)) ≠ n, n + 1 < n1, stutf(nσ) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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) ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)
| # nσ = ⌜n1⌝ , max∞(λ n0. n0 < n1 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. n0 < n1 ∧ nσ(n0) = m).n).take(nσ(n1 - 1) + 1)(nσ(n)) ≠ n, n + 1 < n1, stutf(nσ) ⊦ |
# nσ = ⌜n1⌝ , max∞(λ n0. n0 < n1 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = m0 + 1, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. n0 < n1 ∧ nσ(n0) = m).n).take(nσ(m0) + 1)(nσ(n)) ≠ n, n1 ≠ 0, n + 1 < n1, stutf(nσ) ⊦
Used simplifier rules: stutf-nonempty: ⊦ stutf(nσ) → (nσ = [] ↔ false); ⊦ ¬ n < 0; (s) ⊦ # σ = ⌜0⌝ ↔ σ = []; (s) n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, m0
| # nσ = ⌜n1⌝ , max∞(λ n0. n0 < n1 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , n1 = m0 + 1, nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. n0 < n1 ∧ nσ(n0) = m).n).take(nσ(m0) + 1)(nσ(n)) ≠ n, n1 ≠ 0, n + 1 < n1, stutf(nσ) ⊦ |
# nσ = ⌜m0⌝ + ⌜1⌝ , max∞(λ n0. ¬ m0 < n0 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. ¬ m0 < n0 ∧ nσ(n0) = m).n).take(nσ(m0) + 1)(nσ(n)) ≠ n, n < m0, stutf(nσ) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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) ⊦ m + 1 ≠ 0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| # nσ = ⌜m0⌝ + ⌜1⌝ , max∞(λ n0. ¬ m0 < n0 ∧ nσ(n0) = nσ(n)) = ⌜n⌝ , nσ(n + 1) = nσ(n) + 1, (λ m. max∞(λ n0. ¬ m0 < n0 ∧ nσ(n0) = m).n).take(nσ(m0) + 1)(nσ(n)) ≠ n, n < m0, stutf(nσ) ⊦ |
⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n)
Used simplifier rules: stutf-monle: ⊦ stutf(nσ) → (mon≤(nσ) ↔ true); ⊦ m < n → m ≤ 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∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (s) ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ ⌜n⌝ .n = n; (s) Used terms: nσ, n, m0
| ⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n) |
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ∞, nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ∞, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used formulas: max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ∞
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ∞, nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ∞, nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ ⌜n⌝ ≠ ∞; (s)
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ∞, nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ max∞(np) = ∞ ↔ (∀ n. ∃ n0. n < n0 ∧ np(n0)) ∨ (∀ n. ¬ np(n))
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n)) ∨ (∀ n0. ¬(⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n))) ⊦
Used terms: λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)
| ⊦ max∞(np) = ∞ ↔ (∀ n. ∃ n0. n < n0 ∧ np(n0)) ∨ (∀ n. ¬ np(n)) |
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n)) ∨ (∀ n0. ¬(⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n))) ⊦ |
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n)) ∨ (∀ n0. ¬ ⌜n0⌝ < # nσ ∨ nσ(n0) ≠ nσ(n)) ⊦
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), (∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n)) ∨ (∀ n0. ¬ ⌜n0⌝ < # nσ ∨ nσ(n0) ≠ nσ(n)) ⊦ |
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n) ⊦
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ n0. ¬ ⌜n0⌝ < # nσ ∨ nσ(n0) ≠ nσ(n) ⊦
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ n0. ∃ n1. n0 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n) ⊦ |
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∃ n1. n + 1 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n) ⊦
Used terms: n + 1
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∃ n1. n + 1 < n1 ∧ ⌜n1⌝ < # nσ ∧ nσ(n1) = nσ(n) ⊦ |
nσ(n + 1) = nσ(n) + 1, nσ(n1) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, n + 1 < n1, ⌜n1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| nσ(n + 1) = nσ(n) + 1, nσ(n1) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, n + 1 < n1, ⌜n1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n)
Used simplifier rules: stutf-monle: ⊦ stutf(nσ) → (mon≤(nσ) ↔ true); ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ ¬ n < n; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (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 + 1, n1
| ⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n) |
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∀ n0. ¬ ⌜n0⌝ < # nσ ∨ nσ(n0) ≠ nσ(n) ⊦ |
Used simplifier rules: lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic 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 Used terms: n
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ∞, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∃ n0. max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n0⌝ ⊦
Used terms: max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n))
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) ≠ ⌜n⌝ , ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ), ∃ n0. max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n0⌝ ⊦ |
max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n0⌝ , nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦
Used simplifier rules: ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s)
| max∞(λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)) = ⌜n0⌝ , nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, stutf(nσ) ⊦ |
⊦ max∞(np) = ⌜n⌝ ↔ np(n) ∧ (∀ m. np(m) → ¬ n < m)
nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦
Used terms: n0, λ n0. ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n)
| ⊦ max∞(np) = ⌜n⌝ ↔ np(n) ∧ (∀ m. np(m) → ¬ n < m) |
| nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦ |
nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦
| nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦ |
nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m, ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n) → ¬ n0 < n0 ⊦
Used terms: n0
| nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m, ⌜n0⌝ < # nσ ∧ nσ(n0) = nσ(n) → ¬ n0 < n0 ⊦ |
nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦
Used simplifier rules: ⊦ ¬ n < n; (s)
| nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦ |
⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n)
nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m, mon≤(nσ) ∧ n + 1 ≤ n0 ∧ ⌜n0⌝ < # nσ → nσ(n + 1) ≤ nσ(n0) ⊦
Used terms: nσ, n + 1, n0
| ⊦ mon≤(nσ) ∧ m ≤ n ∧ ⌜n⌝ < # nσ → nσ(m) ≤ nσ(n) |
| nσ(n + 1) = nσ(n) + 1, nσ(n0) = nσ(n), (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m, mon≤(nσ) ∧ n + 1 ≤ n0 ∧ ⌜n0⌝ < # nσ → nσ(n + 1) ≤ nσ(n0) ⊦ |
nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, n0 < n, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦
Used simplifier rules: stutf-monle: ⊦ stutf(nσ) → (mon≤(nσ) ↔ true); ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (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 ⊦ ¬ n < n; (s) ⊦ m + 1 ≤ n ↔ m < n; (s)
| nσ(n0) = nσ(n), nσ(n + 1) = nσ(n) + 1, (leninv(nσ) = ∞ ⊃ ⌜λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n⌝ ;⌜(λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ(n) = m).n).take(leninv(nσ).n)⌝ ) (nσ(n)) ≠ n, n0 ≠ n, ⌜n⌝ + ⌜1⌝ < # nσ, n0 < n, ⌜n0⌝ < # nσ, stutf(nσ), ∀ m. ⌜m⌝ < # nσ ∧ nσ(m) = nσ(n) → ¬ n0 < m ⊦ |
Used simplifier rules: lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic 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 Used terms: 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.