| ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# lf(n)) = lf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → lf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1))
∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∃ α, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
Used terms: alf
| ⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# lf(n)) = lf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → lf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) |
| ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∃ α, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
∀ n. lf(n).last = lf(n + 1).head ∧ lf(n) ≠ [] ⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# lf(n)) = lf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n) + 1⌝ ∧ (∀ m. n ≤ m → lf(m).tail = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1))
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n) ⊦ ∀ n. slf(n).last = slf(n + 1).head ∧ slf(n) ≠ [], ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n) + 1⌝ ∧ (∀ m. n ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
Used terms: slf
| ∀ n. lf(n).last = lf(n + 1).head ∧ lf(n) ≠ [] ⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# lf(n)) = lf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n) + 1⌝ ∧ (∀ m. n ≤ m → lf(m).tail = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) |
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n) ⊦ ∀ n. slf(n).last = slf(n + 1).head ∧ slf(n) ≠ [], ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)), slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ []
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)), slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ [] |
Used simplifier rules: not-frag-empty: ⊦ ¬ frag(IOAut(start, step, ext))([], α); ⊦ ⌜[]⌝ = []; (s) Used terms: n0
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n)) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n) + 1⌝ ∧ (∀ m. n ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, ii0(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(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⌝ + ⌜n⌝ ; (s)
| ii(0) = 0, ii0(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, ii0(0) = 0, ii0 = ii, (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
ii(0) = 0, ii0(0) = 0, ii0 ≠ ii, (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
Used formulas: ii0 = ii
| ii(0) = 0, ii0(0) = 0, ii0 = ii, (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
Used terms: σ, α, ii
| ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) ∧ ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2)
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) ∧ ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) |
ii(0) = 0, ¬ frag(IOAut(start, step, ext))(σ, α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1))
ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ ii(n2 + 1) = ii(n2) + # alf(n2)
| ii(0) = 0, ¬ frag(IOAut(start, step, ext))(σ, α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ (∃ n. ¬(⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))) ⊦
Used terms: ext, α, step, start, σ
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ (∃ n. ¬(⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))) ⊦ |
ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦ |
ii(0) = 0, # σ ≠ # α + ⌜1⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦
# σ = # α + ⌜1⌝ , ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦
Used formulas: # σ ≠ # α + ⌜1⌝
| ii(0) = 0, # σ ≠ # α + ⌜1⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦ |
ii(0) = 0, # σ ≠ # α + ⌜1⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ii(0) = 0, # σ ≠ # α + ⌜1⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# α = ⌜ii(n)⌝ , ii(0) = 0, # σ ≠ # α + ⌜1⌝ , finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦
ii(0) = 0, # σ ≠ # α + ⌜1⌝ , ¬ finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
| # α = ⌜ii(n)⌝ , ii(0) = 0, # σ ≠ # α + ⌜1⌝ , finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
# al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , finp(σ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦
# al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , ¬ finp(σ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
| # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , finp(σ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(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 + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) 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) ⊦ n∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n ≤ n0 → alf(n0) = [] ∧ ii(n0) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: n0
| # al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n ≤ n0 → alf(n0) = [] ∧ ii(n0) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n ≤ n0 → alf(n0) = [] ∧ ii(n0) = ii(n), n0 ≤ n → slf(n).tail = [] ∧ ii(n) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used terms: n
| # al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n ≤ n0 → alf(n0) = [] ∧ ii(n0) = ii(n), n0 ≤ n → slf(n).tail = [] ∧ ii(n) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n → m ≤ n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) Used formulas: n ≤ n0
| # al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , ¬ finp(σ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
# al = ii(n), ii(0) = 0, ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ∞; (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 ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| # al = ii(n), ii(0) = 0, ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0) ⊦ |
# al = ii(n), ii(0) = 0, ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ m. ii(m) ≤ ii(n) ∧ ii(n) < ii(m + 1) ⊦
Used terms: ii(n)
| # al = ii(n), ii(0) = 0, ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ m. ii(m) ≤ ii(n) ∧ ii(n) < ii(m + 1) ⊦ |
# al = ii(n), ii(0) = 0, ii(m) < ii(m + 1), ii(n) < ii(m + 1), ii(m) ≤ ii(n), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # al = ii(n), ii(0) = 0, ii(m) < ii(m + 1), ii(n) < ii(m + 1), ii(m) ≤ ii(n), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
Used terms: m
| ii(0) = 0, # σ ≠ # α + ⌜1⌝ , ¬ finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ii(0) = 0, # σ ≠ ∞, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ ¬ ∞ < 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⌝ + ∞ = ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| ii(0) = 0, # σ ≠ ∞, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n) ⊦ |
ii(0) = 0, σ = ⌜sl⌝ , # σ ≠ ∞, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, σ = ⌜sl⌝ , # σ ≠ ∞, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(n0) + 1 = # sl, ii(0) = 0, ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦
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⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ finp(⌜x⌝ ); (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| ii(n0) + 1 = # sl, ii(0) = 0, ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦ |
ii(n0) + 1 = # sl, ii(0) = 0, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m. ii(m) ≤ ii(n0) ∧ ii(n0) < ii(m + 1) ⊦
Used terms: ii(n0)
| ii(n0) + 1 = # sl, ii(0) = 0, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m. ii(m) ≤ ii(n0) ∧ ii(n0) < ii(m + 1) ⊦ |
ii(n0) + 1 = # sl, ii(0) = 0, ii(m) < ii(m + 1), ii(n0) < ii(m + 1), # sl ≤ ii(m + 1), ii(m) ≤ ii(n0), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat 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 eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat
| ii(n0) + 1 = # sl, ii(0) = 0, ii(m) < ii(m + 1), ii(n0) < ii(m + 1), # sl ≤ ii(m + 1), ii(m) ≤ ii(n0), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: m
| # σ = # α + ⌜1⌝ , ii(0) = 0, (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, # σ ≠ # α + ⌜1⌝ ∨ ¬(⌜n1⌝ < # α → step(σ[n1], α[n1], σ[n1 + 1])) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# σ = # α + ⌜1⌝ , # α = ⌜ii(n)⌝ , ii(0) = 0, ⌜n1⌝ < # α, finp(α), ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦
# σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, ¬ finp(α), ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
| # σ = # α + ⌜1⌝ , # α = ⌜ii(n)⌝ , ii(0) = 0, ⌜n1⌝ < # α, finp(α), ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), ¬ step(σ[n1], al[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: ⊦ 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 ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) 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) ⊦ n∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (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 ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), ¬ step(σ[n1], al[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
# σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), finp(σ), ¬ step(σ[n1], al[n1], σ[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦
Used simplifier rules: ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ ⌜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
| # σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), finp(σ), ¬ step(σ[n1], al[n1], σ[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (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 eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜x⌝ [n] = x[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 + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2) ⊦ |
ii(0) = 0, ∀ n. ii(n) ≤ ii(n + 1), m < ii(n0) ⊦ ∃ n1. n1 < n0 ∧ ii(n1) ≤ m ∧ m < ii(n1 + 1)
# al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∀ n. ii(n) ≤ ii(n + 1)
# al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ n2. n2 < n ∧ ii(n2) ≤ n1 ∧ n1 < ii(n2 + 1) ⊦
Used terms: ii, n1, n
| ii(0) = 0, ∀ n. ii(n) ≤ ii(n + 1), m < ii(n0) ⊦ ∃ n1. n1 < n0 ∧ ii(n1) ≤ m ∧ m < ii(n1 + 1) |
| # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∀ n. ii(n) ≤ ii(n + 1) |
# al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) < ii(n2), n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) < ii(n2), n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
Used simplifier rules: ⊦ m ≤ m + n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: n2, n2 + 1
| # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ n2. n2 < n ∧ ii(n2) ≤ n1 ∧ n1 < ii(n2 + 1) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat
| # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2) ≤ n1, ¬ ii(n) < ii(n2 + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: n2
| # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2) ≤ n1, ¬ ii(n) < ii(n2 + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. ii(n2 + 1) = ii(n2) + # slf(n2) - 1 ∧ ¬ ii(n) < ii(n2 + 1) ∧ sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ ii(n) < ii(n2 + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦
Used terms: n2
| # al = ii(n), ii(n) + 1 = # sl, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ ii(n) < ii(n2 + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ n → (n < m ↔ false); (s)
| # al = ii(n), ii(n) + 1 = # sl, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: n2
| # al = ii(n), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
# ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , # al = ii(n), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦
Used terms: ext, ⌜alf(n2)⌝ , step, start, ⌜slf(n2)⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| # ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , # al = ii(n), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, al.drop(ii(n2)).take(# alf(n2)) = alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦ |
# al = ii(n), ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s)
| # al = ii(n), ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), al.drop(ii(n2)).take(# alf(n2)) = alf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
# al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # al.drop(ii(n2)).take(# alf(n2)) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n] ⊦
Used terms: al.drop(ii(n2)).take(# alf(n2)), alf(n2)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # al.drop(ii(n2)).take(# alf(n2)) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n] ⊦ |
# al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
| # al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
# al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = n4 + 1, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = n4, sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), 1 ≤ ii(n2) + # slf(n2), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n] ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < 1 ↔ m = 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ x.drop(0) = x; (s) ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: ii(n2) + # slf(n2), 1, n4
| # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = n4 + 1, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), ii(n2 + 1) = n4, sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), 1 ≤ ii(n2) + # slf(n2), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n] ⊦ |
# al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[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 ≤ m + n; (s) ⊦ m + 1 ≠ 0; (s) not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat
| # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n] = alf(n2)[n] ⊦ |
# al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), n1 - ii(n2) < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n1 - ii(n2)] = alf(n2)[n1 - ii(n2)], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used terms: n1 - ii(n2)
| # al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), n1 - ii(n2) < # alf(n2) → al.drop(ii(n2)).take(# alf(n2))[n1 - ii(n2)] = alf(n2)[n1 - ii(n2)], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
# al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n1 - ii(n2)] = alf(n2)[n1 - ii(n2)], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| # al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n1 - ii(n2)] = alf(n2)[n1 - ii(n2)], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n1 < ii(n), n1 < ii(n2 + 1), n2 < n, ii(n2 + 1) ≤ ii(n), ii(n2) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
# al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), n1 = n4 + ii(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n1, ii(n2), n4
| # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), n1 = n4 + ii(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n2 < n, n1 < ii(n2 + 1), n1 < ii(n), ii(n2) < ii(n2 + 1), ii(n2) < ii(n), ii(n2) ≤ n1, ii(n2 + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], al[n4 + ii(n2)], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: ⊦ # 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 c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m ≤ m + n; (s)
| # al = ii(n), # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2)).take(# alf(n2))[n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], al[n4 + ii(n2)], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]
# al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2))[n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), ii(n2 + 1) ≤ ii(n), ¬ # al.drop(ii(n2)) < # alf(n2), ¬ step(sl[n4 + ii(n2)], al[n4 + ii(n2)], sl[(n4 + ii(n2)) + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦
Used simplifier rules: ⊦ m < n → ¬ n < m; (s) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m < n → m ≤ n; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < 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 lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ ¬ n < n; (s) Used terms: al.drop(ii(n2)), # alf(n2), n4
| ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m] |
| # al.drop(ii(n2)).take(# alf(n2)) = # alf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al.drop(ii(n2))[n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), ii(n2 + 1) ≤ ii(n), ¬ # al.drop(ii(n2)) < # alf(n2), ¬ step(sl[n4 + ii(n2)], al[n4 + ii(n2)], sl[(n4 + ii(n2)) + 1]), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: ¬ # x < n ⊦ # x.take(n) = n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < n → m ≤ n; (s) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m < n → ¬ n < m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) m + m0 < # x ⊦ x.drop(m)[m0] = x[m + m0]; (s) ⊦ m < n → (n ≤ m ↔ false); (s) c: ⊦ m + n = n + m; from specification nat-basic
| # al = ii(n), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
# al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), n4 < # alf(n2) → step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦
Used terms: n4
| # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), n4 < # alf(n2) → step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
| # al = ii(n), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), sl.drop(ii(n2)).take(# slf(n2)) = slf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
# sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # sl.drop(ii(n2)).take(# slf(n2)) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦
Used terms: sl.drop(ii(n2)).take(# slf(n2)), slf(n2)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # sl.drop(ii(n2)).take(# slf(n2)) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦ |
# al = ii(n), # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
| # al = ii(n), # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
# sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), n4 < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n4] = slf(n2)[n4], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦
Used terms: n4
| # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), n4 < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n4] = slf(n2)[n4], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦ |
# al = ii(n), # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], sl.drop(ii(n2)).take(# slf(n2))[n4] = slf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # al = ii(n), # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), ii(n2) + # slf(n2) = ii(n2 + 1) + 1, ii(n) + 1 = # sl, # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, al[ii(n2) + n4] = alf(n2)[n4], sl.drop(ii(n2)).take(# slf(n2))[n4] = slf(n2)[n4], ii(n0) = ii(n), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), alf(n2) ≠ [], n4 < # alf(n2), ii(n2) < ii(n), ii(n2) < ii(n2 + 1), n2 < n, n4 + ii(n2) < ii(n), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n], ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]
# sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, sl.drop(ii(n2))[n4] = slf(n2)[n4], al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), n4 < # slf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ # sl.drop(ii(n2)) < # slf(n2), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦
Used simplifier rules: ⊦ m + m0 < n → ¬ n + n0 < m; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m = n + 1 → ¬ m ≤ n; (s) ¬ # x < n ⊦ # x.take(n) = n; (s) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < n → n ≠ 0; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < m0 ∧ n0 < n + m → n0 + 1 ≠ n + m0; (s) m + m0 < # x ⊦ x.drop(m)[m0] = x[m + m0]; (s) eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat fle-01: ⊦ m ≤ n ∧ 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 trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m +1 = m + 1; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n → ¬ n < m; (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 Used terms: sl.drop(ii(n2)), # slf(n2), n4
| ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m] |
| # sl.drop(ii(n2)).take(# slf(n2)) = # slf(n2), # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, sl.drop(ii(n2))[n4] = slf(n2)[n4], al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), n4 < # slf(n2), step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ # sl.drop(ii(n2)) < # slf(n2), ¬ step(sl[n4 + ii(n2)], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n), ∀ n. n < # slf(n2) → sl.drop(ii(n2)).take(# slf(n2))[n] = slf(n2)[n] ⊦ |
# al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, sl[ii(n2) + n4] = slf(n2)[n4], al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], sl ≠ [], slf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), n4 < # slf(n2), ii(n2) < # sl, ii(n2 + 1) < # sl, step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(slf(n2)[n4], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n1. n1 < # slf(n2) → sl[ii(n2) + n1] = slf(n2)[n1], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(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 + 1 ≤ n ↔ m < n; (s) ⊦ m < n → ¬ n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ # x = 0 ↔ x = []; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat m + m0 < # x ⊦ x.drop(m)[m0] = x[m + m0]; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ ¬ m + n < m; (s) ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m ≤ n ↔ ¬ n < m; (ss) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ¬ # x < n ⊦ # x.take(n) = n; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s)
| # al = ii(n), # alf(n2) + 1 = # slf(n2), ii(n) + 1 = # sl, ii(n2) + # slf(n2) = ii(n2 + 1) + 1, slf(n2 + 1).head = slf(n2).last, sl[ii(n2) + n4] = slf(n2)[n4], al[ii(n2) + n4] = alf(n2)[n4], ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n0) = ii(n), alf(n2) ≠ [], sl ≠ [], slf(n2) ≠ [], n4 + ii(n2) < ii(n), n2 < n, ii(n2) < ii(n2 + 1), ii(n2) < ii(n), n4 < # alf(n2), n4 < # slf(n2), ii(n2) < # sl, ii(n2 + 1) < # sl, step(slf(n2)[n4], alf(n2)[n4], slf(n2)[n4 + 1]), ii(n2 + 1) ≤ ii(n), ¬ step(slf(n2)[n4], alf(n2)[n4], sl[(n4 + ii(n2)) + 1]), ∀ n1. n1 < # slf(n2) → sl[ii(n2) + n1] = slf(n2)[n1], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n) ⊦ |
Used simplifier rules: ⊦ 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 Used terms: n4 + 1
| # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, ¬ finp(α), ¬ step(σ[n1], α[n1], σ[n1 + 1]), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ii(0) = 0, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) 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) ⊦ ⌜m⌝ < ∞; (s) ⊦ ¬ ∞ < n∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s)
| ii(0) = 0, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦
Used terms: n1
| ii(0) = 0, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦ |
ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: m
| ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: m
| slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
# ⌜slf(m)⌝ = # ⌜alf(m)⌝ + ⌜1⌝ , slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < # ⌜alf(m)⌝ → step(⌜slf(m)⌝ [n], ⌜alf(m)⌝ [n], ⌜slf(m)⌝ [n +1]) ⊦
Used terms: ext, ⌜alf(m)⌝ , step, start, ⌜slf(m)⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| # ⌜slf(m)⌝ = # ⌜alf(m)⌝ + ⌜1⌝ , slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < # ⌜alf(m)⌝ → step(⌜slf(m)⌝ [n], ⌜alf(m)⌝ [n], ⌜slf(m)⌝ [n +1]) ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]) ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, af.drop(ii(m)).take(# alf(m)) = alf(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
# af.drop(ii(m)).take(# alf(m)) = # alf(m), # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # af.drop(ii(m)).take(# alf(m)) → af.drop(ii(m)).take(# alf(m))[n] = alf(m)[n] ⊦
Used terms: af.drop(ii(m)).take(# alf(m)), alf(m)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| # af.drop(ii(m)).take(# alf(m)) = # alf(m), # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # af.drop(ii(m)).take(# alf(m)) → af.drop(ii(m)).take(# alf(m))[n] = alf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦
Used simplifier rules: ⊦ nf.drop(n)(m) = nf(m + n); (s) m < n ⊦ nf.take(n)[m] = nf(m); (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # nf.take(n) = n; (s)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), n1 - ii(m) < # alf(m) → af((n1 - ii(m)) + ii(m)) = alf(m)[n1 - ii(m)], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: n1 - ii(m)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), n1 - ii(m) < # alf(m) → af((n1 - ii(m)) + ii(m)) = alf(m)[n1 - ii(m)], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af((n1 - ii(m)) + ii(m)) = alf(m)[n1 - ii(m)], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af((n1 - ii(m)) + ii(m)) = alf(m)[n1 - ii(m)], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, n1 = n0 + ii(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n1, ii(m), n0
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, n1 = n0 + ii(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), ii(m) ≤ n1, ¬ step(sf(n1), af(n1), sf(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (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 = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ m + n; (s)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, sf.drop(ii(m)).take(# slf(m)) = slf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦
Used terms: m
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, sf.drop(ii(m)).take(# slf(m)) = slf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
# sf.drop(ii(m)).take(# slf(m)) = # slf(m), # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # sf.drop(ii(m)).take(# slf(m)) → sf.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦
Used terms: sf.drop(ii(m)).take(# slf(m)), slf(m)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| # sf.drop(ii(m)).take(# slf(m)) = # slf(m), # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # sf.drop(ii(m)).take(# slf(m)) → sf.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ nf.drop(n)(m) = nf(m + n); (s) m < n ⊦ nf.take(n)[m] = nf(m); (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # nf.take(n) = n; (s)
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦
Used terms: n0
| # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), ii(m) + # slf(m) = n1 + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = n1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), 1 ≤ ii(m) + # slf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < 1 ↔ m = 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: ii(m) + # slf(m), 1, n1
| # alf(m) + 1 = # slf(m), ii(m) + # slf(m) = n1 + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = n1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), 1 ≤ ii(m) + # slf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(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 ≤ m + n; (s) ⊦ m + 1 ≠ 0; (s) not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat
| # alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # slf(m) → sf(n0 + ii(m)) = slf(m)[n0], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(m) + # slf(m) = ii(m + 1) + 1, # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ii(m) + # slf(m) = ii(m + 1) + 1, # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(sf(n0 + ii(m)), alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| # alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(m) + # slf(m) = ii(m + 1) + 1, # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # alf(m) → step(slf(m)[n0], alf(m)[n0], slf(m)[n0 + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦
Used terms: n0
| ii(m) + # slf(m) = ii(m + 1) + 1, # alf(m) + 1 = # slf(m), slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], ii(m) < ii(m + 1), n0 < # alf(m), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), n0 < # alf(m) → step(slf(m)[n0], alf(m)[n0], slf(m)[n0 + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n] ⊦ |
# alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), step(slf(m)[n0], alf(m)[n0], slf(m)[n0 + 1]), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| # alf(m) + 1 = # slf(m), ii(m) + # slf(m) = ii(m + 1) + 1, slf(m + 1).head = slf(m).last, af(n0 + ii(m)) = alf(m)[n0], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf(n0 + ii(m)) = slf(m)[n0], alf(m) ≠ [], n0 < # alf(m), ii(m) < ii(m + 1), step(slf(m)[n0], alf(m)[n0], slf(m)[n0 + 1]), ¬ step(slf(m)[n0], alf(m)[n0], sf((n0 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
Used simplifier rules: ⊦ 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 Used terms: n0 + 1
| ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) |
# α = ⌜ii(n)⌝ , ii(0) = 0, finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1))
ii(0) = 0, ¬ finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1))
| # α = ⌜ii(n)⌝ , ii(0) = 0, finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) |
# al = ii(n), ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2) ⊦ ∃ n1. ii(n) = ii(n1) ∧ (∀ m. n1 ≤ m → alf(m) = [] ∧ ii(m) = ii(n1))
Used simplifier rules: ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ finp(⌜x⌝ ); (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # al = ii(n), ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), ∀ n2. ii(n2 + 1) = ii(n2) + # alf(n2) ∧ ¬ ii(n) < ii(n2 + 1) ∧ al.drop(ii(n2)).take(# alf(n2)) = alf(n2) ⊦ ∃ n1. ii(n) = ii(n1) ∧ (∀ m. n1 ≤ m → alf(m) = [] ∧ ii(m) = ii(n1)) |
Used terms: n
| ii(0) = 0, ¬ finp(α), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) |
ii(0) = 0, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used simplifier rules: ⊦ ¬ finp(⌜nf⌝ ); (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| ii(0) = 0, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used terms: n1
| ii(0) = 0, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), ii(m) ≤ n1, finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
Used terms: m
| ii(0) = 0, (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ ii(n2 + 1) = ii(n2) + # alf(n2) |
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ ii(n2 + 1) = ii(n2) + # alf(n2)
Used terms: n2
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ ∧ ii(n2 + 1) = ii(n2) + # alf(n2) |
ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ
| ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ |
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ
Used terms: n2
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) ∧ ⌜ii(n2 + 1)⌝ < # σ |
ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
| ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
⊦ m ≤ n ∧ ¬ # σ < ⌜n⌝ → σ.take(n).drop(m) = σ.drop(m).take(n - m)
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2), ii(n2) ≤ ii(n2 + 1) + 1 ∧ ¬ # σ < ⌜ii(n2 + 1) + 1⌝
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # σ < ⌜ii(n2 + 1) + 1⌝ , ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(ii(n2 + 1) + 1 - ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used terms: σ, ii(n2 + 1) + 1, ii(n2)
| ⊦ m ≤ n ∧ ¬ # σ < ⌜n⌝ → σ.take(n).drop(m) = σ.drop(m).take(n - m) |
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2), ii(n2) ≤ ii(n2 + 1) + 1 ∧ ¬ # σ < ⌜ii(n2 + 1) + 1⌝ |
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2 + 1) + 1 < ii(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) 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)
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2 + 1) + 1 < ii(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.take(ii(n2 + 1) + 1).drop(ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
Used simplifier rules: lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m + 1 ≠ 0; (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 ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ m < n → n ≠ 0; (s) n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: ii(n2) + # slf(n2), m0
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # σ < ⌜ii(n2 + 1) + 1⌝ , ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(ii(n2 + 1) + 1 - ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.drop(ii(n2)).take(ii(n2 + 1) + 1 - ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
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⌝ + ⌜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)
| ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.drop(ii(n2)).take(ii(n2 + 1) + 1 - ii(n2)) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) + 1 = n1 + ii(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: ii(n2 + 1) + 1, ii(n2), n1
| ii(n2 + 1) + 1 = n1 + ii(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1) + 1, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) + 1 = n1 + ii(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
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; (s)
| ii(n2 + 1) + 1 = n1 + ii(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) + 1 = n1 + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used terms: n2
| ii(n2 + 1) + 1 = n1 + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
# ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , ii(n2 + 1) + 1 = n1 + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used terms: ext, ⌜alf(n2)⌝ , step, start, ⌜slf(n2)⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| # ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , ii(n2 + 1) + 1 = n1 + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) + 1 = n1 + ii(n2), # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s)
| ii(n2 + 1) + 1 = n1 + ii(n2), # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
# alf(n2) + 1 = # slf(n2), ii(n2 + 1) + 1 = n1 + ii(n2), ii(n2) + # slf(n2) = m0 + 1, slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = m0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2) + # slf(n2) ≠ 0, ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2)
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: ii(n2) + # slf(n2), m0
| # alf(n2) + 1 = # slf(n2), ii(n2 + 1) + 1 = n1 + ii(n2), ii(n2) + # slf(n2) = m0 + 1, slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii(n2 + 1) = m0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2) + # slf(n2) ≠ 0, ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ σ.drop(ii(n2)).take(n1) = slf(n2) ∧ α.take(ii(n2 + 1)).drop(ii(n2)) = alf(n2) |
ii(n2 + 1) + 1 = # slf(n2) + ii(n2), # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), # slf(n2) + ii(n2) ≠ 0, α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s)
| ii(n2 + 1) + 1 = # slf(n2) + ii(n2), # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), # slf(n2) + ii(n2) ≠ 0, α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
ii(n2 + 1) + 1 = (# alf(n2) + 1) + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), (# alf(n2) + 1) + ii(n2) ≠ 0, α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦
| ii(n2 + 1) + 1 = (# alf(n2) + 1) + ii(n2), slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), (# alf(n2) + 1) + ii(n2) ≠ 0, α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ |
slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = # alf(n2) + ii(n2), ii(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m + n = m + n0 ↔ n = n0; (s)
| slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = # alf(n2) + ii(n2), ii(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), α.take(ii(n2 + 1)).drop(ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ |
⊦ m ≤ n ∧ ¬ # σ < ⌜n⌝ → σ.take(n).drop(m) = σ.drop(m).take(n - m)
slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = # alf(n2) + ii(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), α.drop(ii(n2)).take(ii(n2 + 1) - ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (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 Used terms: α, ii(n2 + 1), ii(n2)
| ⊦ m ≤ n ∧ ¬ # σ < ⌜n⌝ → σ.take(n).drop(m) = σ.drop(m).take(n - m) |
| slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = # alf(n2) + ii(n2), σ.drop(ii(n2)).take(# alf(n2) + 1) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), α.drop(ii(n2)).take(ii(n2 + 1) - ii(n2)) ≠ alf(n2), ⌜ii(n2 + 1)⌝ < # σ, ii(n2) ≤ ii(n2 + 1), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n3. n3 < # alf(n2) → step(slf(n2)[n3], alf(n2)[n3], slf(n2)[n3 + 1]) ⊦ |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: ii(n2 + 1), ii(n2), n1
| ii(0) = 0, ii0(0) = 0, ii0 ≠ ii, (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, ii0(0) = 0, ii0(n1) ≠ ii(n1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n))
| ii(0) = 0, ii0(0) = 0, ii0(n1) ≠ ii(n1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ ∃ σ, α, ii. frag(IOAut(start, step, ext))(σ, α) ∧ ii(0) = 0 ∧ (finp(α) ⊃ ∃ n. # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ⌜ii(n + 1)⌝ < # σ ∧ α.take(ii(n + 1)).drop(ii(n)) = alf(n) ∧ σ.take(ii(n + 1) + 1).drop(ii(n)) = slf(n)) |
ii(0) = 0, ii0(0) = 0, ii0(n1) ≠ ii(n1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦
| ii(0) = 0, ii0(0) = 0, ii0(n1) ≠ ii(n1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 +1) ≠ ii(n2 +1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ ii, ii0, σ, n0, slf, α, n, alf, start, step, ext. ¬ ( ii(0) = 0 ∧ ii0(0) = 0 ∧ ii0(n2) ≠ ii(n2) ∧ (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∧ (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∧ (∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∧ (∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n))) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| ii(0) = 0, ii0(0) = 0, ii0(n2 +1) ≠ ii(n2 +1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ ii, ii0, σ, n0, slf, α, n, alf, start, step, ext. ¬ ( ii(0) = 0 ∧ ii0(0) = 0 ∧ ii0(n2) ≠ ii(n2) ∧ (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∧ (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∧ (∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∧ (∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∧ (∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n))) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ ii1, ii2, σ0, n1, slf0, α0, n3, alf0, start0, step0, ext0. ii1(0) ≠ 0 ∨ ii2(0) ≠ 0 ∨ ii2(n2) = ii1(n2) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii2(n1)⌝ + ⌜1⌝ ∧ (∀ m. n1 ≤ m → slf0(m).tail = [] ∧ ii2(m) = ii2(n1));∀ n. ∃ m. ii2(m) ≤ n ∧ n < ii2(m + 1)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii1(n3)⌝ ∧ (∀ m. n3 ≤ m → alf0(m) = [] ∧ ii1(m) = ii1(n3));∀ n. ∃ m. ii1(m) ≤ n ∧ n < ii1(m + 1)) ∨ ¬(∀ n. frag*(IOAut(start0, step0, ext0))(slf0(n), alf0(n)) ∧ slf0(n + 1).head = slf0(n).last) ∨ ¬(∀ m, n. m ≤ n → ii1(m) ≤ ii1(n)) ∨ ¬(∀ n. ii1(n + 1) = ii1(n) + # alf0(n) ∧ ¬ # α0 < ⌜ii1(n + 1)⌝ ∧ α0.drop(ii1(n)).take(# alf0(n)) = alf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii2(m) ≤ ii2(n)) ∨ ¬(∀ n. ii2(n + 1) = ii2(n) + # slf0(n) - 1 ∧ ⌜ii2(n + 1)⌝ < # σ0 ∧ σ0.drop(ii2(n)).take(# slf0(n)) = slf0(n)) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ ii1, ii2, σ0, n1, slf0, α0, n3, alf0, start0, step0, ext0. ii1(0) ≠ 0 ∨ ii2(0) ≠ 0 ∨ ii2(n2) = ii1(n2) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii2(n1)⌝ + ⌜1⌝ ∧ (∀ m. n1 ≤ m → slf0(m).tail = [] ∧ ii2(m) = ii2(n1));∀ n. ∃ m. ii2(m) ≤ n ∧ n < ii2(m + 1)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii1(n3)⌝ ∧ (∀ m. n3 ≤ m → alf0(m) = [] ∧ ii1(m) = ii1(n3));∀ n. ∃ m. ii1(m) ≤ n ∧ n < ii1(m + 1)) ∨ ¬(∀ n. frag*(IOAut(start0, step0, ext0))(slf0(n), alf0(n)) ∧ slf0(n + 1).head = slf0(n).last) ∨ ¬(∀ m, n. m ≤ n → ii1(m) ≤ ii1(n)) ∨ ¬(∀ n. ii1(n + 1) = ii1(n) + # alf0(n) ∧ ¬ # α0 < ⌜ii1(n + 1)⌝ ∧ α0.drop(ii1(n)).take(# alf0(n)) = alf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii2(m) ≤ ii2(n)) ∨ ¬(∀ n. ii2(n + 1) = ii2(n) + # slf0(n) - 1 ∧ ⌜ii2(n + 1)⌝ < # σ0 ∧ σ0.drop(ii2(n)).take(# slf0(n)) = slf0(n)) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ii(0) ≠ 0 ∨ ii0(0) ≠ 0 ∨ ii0(n2) = ii(n2) ∨ ¬ (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∨ ¬(∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last) ∨ ¬(∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∨ ¬(∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∨ ¬(∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n)) ⊦
Used terms: ii, ii0, σ, n0, slf, α, n, alf, start, step, ext
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ii(0) ≠ 0 ∨ ii0(0) ≠ 0 ∨ ii0(n2) = ii(n2) ∨ ¬ (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ∨ ¬(∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last) ∨ ¬(∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∨ ¬(∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)) ∨ ¬(∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n)) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦
| ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦
Used terms: n2
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ n. ii0(n + 1) = ii0(n) + # slf(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ ∧ σ.drop(ii0(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ |
ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii0(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii0(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦
Used terms: n2
| ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii0(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii0(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦ |
ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2) = ii(n2), ii0(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦
| ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2) = ii(n2), ii0(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. frag*(IOAut(start, step, ext))(slf(n), alf(n)) ∧ slf(n + 1).head = slf(n).last ⊦ |
slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦
Used terms: n2
| slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
# ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2) = ii(n2), ii0(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦
Used terms: ext, ⌜alf(n2)⌝ , step, start, ⌜slf(n2)⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| # ⌜slf(n2)⌝ = # ⌜alf(n2)⌝ + ⌜1⌝ , slf(n2 + 1).head = slf(n2).last, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2) = ii(n2), ii0(0) = 0, σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ⌜n⌝ < # ⌜alf(n2)⌝ → step(⌜slf(n2)⌝ [n], ⌜alf(n2)⌝ [n], ⌜slf(n2)⌝ [n +1]) ⊦ |
# alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n1. n1 < # alf(n2) → step(slf(n2)[n1], alf(n2)[n1], slf(n2)[n1 + 1]) ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s)
| # alf(n2) + 1 = # slf(n2), slf(n2 + 1).head = slf(n2).last, ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, ¬ # α < ⌜ii(n2 + 1)⌝ , (finp(σ) ⊃ # σ = ⌜ii0(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii0(m) = ii0(n0));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n1. n1 < # alf(n2) → step(slf(n2)[n1], alf(n2)[n1], slf(n2)[n1 + 1]) ⊦ |
Used simplifier rules: ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ n + 0 = n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
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.