| ⊦ ¬ # α < ⌜n⌝ ∧ ⌜n⌝ < # σ → ( frag(IOAut(start, step, ext))(σ, α) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))) |
¬ (frag(IOAut(start, step, ext))(σ, α) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦
| ¬ (frag(IOAut(start, step, ext))(σ, α) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ |
¬ (frag(IOAut(start, step, ext))(σ, α) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦
| ¬ (frag(IOAut(start, step, ext))(σ, α) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))
Used terms: ext, α, start, σ, step
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n)) |
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n))
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n)) |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 +1]))
Used terms: ext, α.drop(n), start, σ.drop(n), step
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 +1])) |
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]))
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1])) |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ ( # σ.take(n + 1) = # α.take(n) + 1 ∧ (∀ n0. n0 < # α.take(n) → IOAut(start, step, ext).step(σ.take(n + 1)[n0], α.take(n)[n0], σ.take(n + 1)[n0 +1]))) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]))
Used terms: IOAut(start, step, ext), σ.take(n + 1), α.take(n)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ ( # σ.take(n + 1) = # α.take(n) + 1 ∧ (∀ n0. n0 < # α.take(n) → IOAut(start, step, ext).step(σ.take(n + 1)[n0], α.take(n)[n0], σ.take(n + 1)[n0 +1]))) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1])) |
⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ (∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]))
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]; (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⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (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) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → ¬ n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s)
| ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) ↔ (∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1])) |
# σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ (∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]))
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]))
| # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ (∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1])) |
# σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ (n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]))
| # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ (n0 < n → step(σ[n0], α[n0], σ[n0 + 1])) ∧ # σ.drop(n) = # α.drop(n) + ⌜1⌝ ∧ (⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1])) |
# σ = # α + ⌜1⌝ , n0 < n, ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
# σ = # α + ⌜1⌝ , # σ.drop(n) ≠ # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
# σ = # α + ⌜1⌝ , ⌜n1⌝ < # α.drop(n), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
| # σ = # α + ⌜1⌝ , n0 < n, ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lele-trans: ⊦ ¬ n∞1 < n∞ ∧ ¬ n∞2 < n∞1 → ¬ n∞2 < n∞; (forward) from specification nat-inf ⊦ m < n → n ≠ 0; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: n0
| # σ = # α + ⌜1⌝ , # σ.drop(n) ≠ # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
# σ = # α + ⌜1⌝ , ⌜(# σ).n - n⌝ ≠ # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, finp(σ), ¬ # σ < ⌜n⌝ , ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used simplifier rules: ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ # σ = ∞ → # σ.drop(n) = ∞; (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 Used terms: σ, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝ |
| # σ = # α + ⌜1⌝ , ⌜(# σ).n - n⌝ ≠ # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, finp(σ), ¬ # σ < ⌜n⌝ , ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⌜# sl⌝ = # α + ⌜1⌝ , sl ≠ [], ⌜# sl - n⌝ ≠ # α.drop(n) + ⌜1⌝ , n < # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ .n = n; (s) ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| ⌜# sl⌝ = # α + ⌜1⌝ , sl ≠ [], ⌜# sl - n⌝ ≠ # α.drop(n) + ⌜1⌝ , n < # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 1]) ⊦ |
# sl = n1 + n, ⌜# sl⌝ = # α + ⌜1⌝ , sl ≠ [], ⌜n1⌝ ≠ # α.drop(n) + ⌜1⌝ , n < # sl, n ≤ # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 1]) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # sl, n, n1
| # sl = n1 + n, ⌜# sl⌝ = # α + ⌜1⌝ , sl ≠ [], ⌜n1⌝ ≠ # α.drop(n) + ⌜1⌝ , n < # sl, n ≤ # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 1]) ⊦ |
# sl = n1 + n, ⌜n1⌝ + ⌜n⌝ = # α + ⌜1⌝ , n1 ≠ 0, sl ≠ [], ⌜n1⌝ ≠ # α.drop(n) + ⌜1⌝ , ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 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 < m + n ↔ n ≠ 0; (s) ⊦ m < n → n ≠ 0; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| # sl = n1 + n, ⌜n1⌝ + ⌜n⌝ = # α + ⌜1⌝ , n1 ≠ 0, sl ≠ [], ⌜n1⌝ ≠ # α.drop(n) + ⌜1⌝ , ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α → step(sl[n0], α[n0], sl[n0 + 1]) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
Used simplifier rules: ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ + ⌜n1⌝ ↔ n + m = n0 + n1; (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⌝ .n = n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ ⌜n⌝ ≠ ∞; (s) Used terms: α, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝ |
| # σ = # α + ⌜1⌝ , ⌜n1⌝ < # α.drop(n), ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ
# σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1⌝ < # α.drop(n), ¬ ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
# σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1 + n⌝ < # α, ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used terms: n1, α, n
| ⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ |
| # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1⌝ < # α.drop(n), ¬ ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
# σ = ⌜n⌝ + ⌜1⌝ , ⌜n⌝ = # α, ⌜n1⌝ < # α.drop(n), ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m ≤ m; (s) ⊦ 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 < n + 1 ↔ ¬ n < m; (s) ⊦ n∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (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 lels-trans: ⊦ ¬ n∞1 < n∞ ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ¬ n∞1 < n∞ → (n∞ < n∞1 ↔ n∞ ≠ n∞1); (ss)
| # σ = ⌜n⌝ + ⌜1⌝ , ⌜n⌝ = # α, ⌜n1⌝ < # α.drop(n), ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
Used simplifier rules: ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ ⌜n⌝ .n = n; (s) ⊦ m - m = 0; (s) ⊦ ¬ n < n; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ ⌜m⌝ < ∞; (s) ⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; 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⌝ < # σ → σ.drop(n)[m] = σ[n + m]; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜n⌝ ≠ ∞; (s) Used terms: α, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝ |
| # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1 + n⌝ < # α, ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
# σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ¬ step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used simplifier rules: ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + 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∞ < n∞0 → ¬ n∞0 < n∞; (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)
| # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ¬ step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m]
# σ = # α + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used simplifier rules: lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf lels-trans: ⊦ ¬ n∞1 < n∞ ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (s) ⊦ 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 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∞0 + ⌜1⌝ = n∞ → (n∞ < n∞0 ↔ false); (s) Used terms: σ, n, n1
| ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m] |
| # σ = # α + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m]
# σ = # α + ⌜1⌝ , ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ¬ ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
# σ = # α + ⌜1⌝ , ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ[n + n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used terms: σ, n, n1 + 1
| ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m] |
| # σ = # α + ⌜1⌝ , ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ¬ ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
# σ = # α + ⌜1⌝ , (⌜n⌝ + ⌜n1⌝ ) + ⌜1⌝ = # σ, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 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∞0 → (n∞ + ⌜1⌝ < n∞0 ↔ ¬(n∞ + ⌜1⌝ = n∞0 ∧ n∞ ≠ ∞)); (ss) 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)
| # σ = # α + ⌜1⌝ , (⌜n⌝ + ⌜n1⌝ ) + ⌜1⌝ = # σ, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ.drop(n)[n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
Used simplifier rules: ⊦ m ≤ n → (⌜(* n)⌝ + n∞1 = ⌜(* m)⌝ + n∞2 ↔ ⌜n - m⌝ + n∞1 = n∞2); (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ ⌜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 ⊦ ⌜n⌝ + n∞1 < ⌜n⌝ + n∞2 ↔ n∞1 < n∞2; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (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∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (s) ⊦ ¬ n∞ < n∞; (s)
| # σ = # α + ⌜1⌝ , ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ[n + n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
# σ = # α + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ[n + n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
Used simplifier rules: add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf 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)
| # σ = # α + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ + ⌜n1⌝ < # σ, ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, ¬ step(σ[n + n1], α[n + n1], σ[n + n1 + 1]), ∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
Used simplifier rules: ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf Used terms: n + n1
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (∀ n0. ⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]))
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]))
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1]))
Used formulas: # σ = # α + ⌜1⌝
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) |
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n0⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n0⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n0⌝ < # α, ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦
Used terms: n0
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n0⌝ < # α, ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ |
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n0⌝ < # α, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n0⌝ < # α, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n0⌝ < # α, ⌜n⌝ < # σ, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ⌜n0 - n⌝ < # α.drop(n) → step(σ.drop(n)[n0 - n], α.drop(n)[n0 - n], σ.drop(n)[(n0 - n) + 1]) ⊦
Used terms: n0 - n
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n0⌝ < # α, ⌜n⌝ < # σ, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ⌜n0 - n⌝ < # α.drop(n) → step(σ.drop(n)[n0 - n], α.drop(n)[n0 - n], σ.drop(n)[(n0 - n) + 1]) ⊦ |
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , n0 = n1 + n, ⌜n⌝ < # σ, ⌜n0⌝ < # α, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]) ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n0, n, n1
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , n0 = n1 + n, ⌜n⌝ < # σ, ⌜n0⌝ < # α, n ≤ n0, ¬ # α < ⌜n⌝ , ¬ step(σ[n0], α[n0], σ[n0 + 1]), ⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α.drop(n)[n1], σ.drop(n)[n1 + 1]) ⊦ |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]), ⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]) ⊦
Used simplifier rules: ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + 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 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) ⊦ m ≤ m + n; (s)
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]), ⌜n1⌝ < # α.drop(n) → step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]) ⊦ |
⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]), ⌜n1 + n⌝ < # α → step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]) ⊦
Used simplifier rules: ⊦ ¬ n∞1 < n∞ → (n∞ < n∞1 ↔ n∞ ≠ n∞1); (ss) ls-trans: ⊦ n∞ < n∞1 ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf lels-trans: ⊦ ¬ n∞1 < n∞ ∧ n∞1 < n∞2 → 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: n1, α, n
| ⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ |
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, ¬ # α < ⌜n⌝ , ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]), ⌜n1 + n⌝ < # α → step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]) ⊦ |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + 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⌝ + ⌜n⌝ ; (s) ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s)
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦ |
⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m]
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n⌝ + ⌜n1 + 1⌝ < # σ, step(σ.drop(n)[n1], α[n + n1], σ[n + n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦
Used terms: σ, n, n1 + 1
| ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m] |
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ ⌜n⌝ + ⌜n1 + 1⌝ < # σ, ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦ |
# σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 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 c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, step(σ.drop(n)[n1], α[n + n1], σ.drop(n)[n1 + 1]), ¬ ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦ |
Used simplifier rules: ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ n∞ + ⌜0⌝ = n∞; (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
| # σ = # α + ⌜1⌝ , # σ.drop(n) = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n⌝ < # α, ⌜n⌝ + ⌜n1 + 1⌝ < # σ, step(σ.drop(n)[n1], α[n + n1], σ[n + n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦ |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, step(σ.drop(n)[n1], α[n + n1], σ[n + n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦
Used simplifier rules: add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf 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)
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ = # α + ⌜1⌝ , ⌜n⌝ < # α, ⌜n⌝ < # σ, ⌜n1⌝ + ⌜n⌝ < # α, ⌜n⌝ + ⌜n1⌝ + ⌜1⌝ < # σ, step(σ.drop(n)[n1], α[n + n1], σ[n + n1 + 1]), ¬ step(σ[n1 + n], α[n1 + n], σ[(n1 + n) + 1]) ⊦ |
⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[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 lsle-trans: ⊦ n∞ < n∞1 ∧ ¬ n∞2 < n∞1 → n∞ < n∞2; (forward) from specification nat-inf lels-trans: ⊦ ¬ n∞1 < n∞ ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf ⊦ ⌜n⌝ + n∞1 < ⌜n⌝ + n∞2 ↔ n∞1 < n∞2; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ¬ m + n < 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 Used terms: σ, n, n1
| ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m] |
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ # σ = # α + ⌜1⌝ ∧ (⌜n0⌝ < # α → step(σ[n0], α[n0], σ[n0 + 1])) |
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
# σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ)
⌜(# σ).n - n⌝ = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, finp(σ), ¬ # σ < ⌜n⌝ , ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦
Used terms: σ, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝ |
| # σ.drop(n) = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) |
# α.drop(n) = ∞, # α ≠ ∞, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(sf(n0), α[n0], sf(n0 + 1)), ∀ n0. step(sf(n0 + n), α.drop(n)[n0], sf((n0 + 1) + n)) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s) ⊦ nf.drop(n)(m) = nf(m + n); (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ # ⌜nf⌝ = ∞; (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) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s)
| # α.drop(n) = ∞, # α ≠ ∞, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(sf(n0), α[n0], sf(n0 + 1)), ∀ n0. step(sf(n0 + n), α.drop(n)[n0], sf((n0 + 1) + n)) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
Used simplifier rules: ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ # ⌜nf⌝ = ∞; (s) Used terms: α, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝ |
| ⌜(# σ).n - n⌝ = # α.drop(n) + ⌜1⌝ , # σ ≠ # α + ⌜1⌝ , ⌜n⌝ < # σ, finp(σ), ¬ # σ < ⌜n⌝ , ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(σ[n0], α[n0], σ[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(σ.drop(n)[n0], α.drop(n)[n0], σ.drop(n)[n0 + 1]) ⊦ |
⌜# sl - n⌝ = # α.drop(n) + ⌜1⌝ , sl ≠ [], ⌜# sl⌝ ≠ # α + ⌜1⌝ , n < # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ .n = n; (s) ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| ⌜# sl - n⌝ = # α.drop(n) + ⌜1⌝ , sl ≠ [], ⌜# sl⌝ ≠ # α + ⌜1⌝ , n < # sl, ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 1]) ⊦ |
# sl = n1 + n, ⌜n1⌝ = # α.drop(n) + ⌜1⌝ , sl ≠ [], ⌜# sl⌝ ≠ # α + ⌜1⌝ , n < # sl, n ≤ # sl, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # sl, n, n1
| # sl = n1 + n, ⌜n1⌝ = # α.drop(n) + ⌜1⌝ , sl ≠ [], ⌜# sl⌝ ≠ # α + ⌜1⌝ , n < # sl, n ≤ # sl, ¬ # α < ⌜n⌝ , ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 1]), ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]) ⊦ |
# sl = n1 + n, ⌜n1⌝ = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ ≠ # α + ⌜1⌝ , n1 ≠ 0, sl ≠ [], ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 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 < m + n ↔ n ≠ 0; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| # sl = n1 + n, ⌜n1⌝ = # α.drop(n) + ⌜1⌝ , ⌜n1⌝ + ⌜n⌝ ≠ # α + ⌜1⌝ , n1 ≠ 0, sl ≠ [], ¬ # α < ⌜n⌝ , ∀ n0. ⌜n0⌝ < # α.drop(n) → step(sl.drop(n)[n0], α.drop(n)[n0], sl.drop(n)[n0 + 1]), ∀ n0. n0 < n → step(sl[n0], α[n0], sl[n0 + 1]) ⊦ |
⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - n⌝
Used simplifier rules: ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) m + m0 < # x ⊦ x.drop(m)[m0] = x[m + m0]; (s) ⊦ m + 1 ≠ 0; (s) ⊦ ⌜n⌝ .n = n; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ m ≤ n → (⌜(* n)⌝ + n∞1 = ⌜(* m)⌝ + n∞2 ↔ ⌜n - m⌝ + n∞1 = n∞2); (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (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 ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ ⌜m⌝ < ∞; (s) ⌜n⌝ < # σ ⊦ ⌜n0⌝ < # σ.drop(n) ↔ ⌜n0 + n⌝ < # σ; (s) ⊦ ⌜n⌝ + ⌜m⌝ < # σ → σ.drop(n)[m] = σ[n + m]; (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) ⊦ ⌜n⌝ ≠ ∞; (s) Used terms: α, n
| ⊦ ¬ # σ < ⌜n⌝ ∧ finp(σ) → # σ.drop(n) = ⌜(# σ).n - 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.