| nσ[n0] = n + 1, leninv(nσ) = ⌜n1⌝ , n + 1 < n1, 1 + n < n1, ⌜n0⌝ < # nσ, stutf(nσ), n0 ≤ ((λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ[n] = m).n) to n1)[n], stutf(nσ) ∧ ⌜n0⌝ < # nσ ∧ n ≤ nσ[n0] → (∃ m0. m0 ≤ n0 ∧ nσ[m0] = n), ∀ n2. ¬ ⌜n2⌝ < # nσ ∨ nσ[n2] ≠ n, ∀ m. ⌜m⌝ < # nσ ∧ nσ[m] = n + 1 → ¬ n0 < m ⊦ |
nσ[n0] = nσ[m] + 1, leninv(nσ) = ⌜n1⌝ , nσ[n0] < n1, ⌜n0⌝ < # nσ, stutf(nσ), m ≤ ((λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ[n] = m).n) to n1)[nσ[m]], n0 ≤ ((λ m. max∞(λ n. ⌜n⌝ < # nσ ∧ nσ[n] = m).n) to n1)[nσ[m]], m ≤ n0, ∀ n2. ¬ ⌜n2⌝ < # nσ ∨ nσ[n2] ≠ nσ[m], ∀ m0. ⌜m0⌝ < # nσ ∧ nσ[m0] = nσ[n0] → ¬ n0 < m0 ⊦
Used simplifier rules: lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m ≤ m + n; (s)