| start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) |
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ |
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(⌜al⌝ ) = cext !(⌜caf(n) '⌝ ) ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) ⊦
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ ∀ n. ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(⌜al⌝ ) = cext !(⌜caf(n) '⌝ ) ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
Used formulas: ∀ n. ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(⌜al⌝ ) = cext !(⌜caf(n) '⌝ ) ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(⌜al⌝ ) = cext !(⌜caf(n) '⌝ ) ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) ⊦ |
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(⌜alf(n0)⌝ ) = cext !(⌜caf(n0) '⌝ ) ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(⌜alf(n0)⌝ ) = cext !(⌜caf(n0) '⌝ ) ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ |
⊦ ∃ σ, 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))
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(⌜alf(n0)⌝ ) = cext !(⌜caf(n0) '⌝ ) ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∃ α, 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)) ⊦
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)) |
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(⌜alf(n0)⌝ ) = cext !(⌜caf(n0) '⌝ ) ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∃ α, 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(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| ii(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
∀ 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, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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)) ⊦
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, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ []
| ii(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ [] |
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0)[0] = sf(n0), ii(0) = 0, frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ []
Used terms: n0
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0)[0] = sf(n0), ii(0) = 0, frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ slf(n0).last = slf(n0 + 1).head ∧ slf(n0) ≠ [] |
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0)[0] = sf(n0), ii(0) = 0, frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ sf(n0 + 1) = slf(n0 + 1).head ∧ slf(n0) ≠ []
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0)[0] = sf(n0), ii(0) = 0, frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ sf(n0 + 1) = slf(n0 + 1).head ∧ slf(n0) ≠ [] |
⊦ x ≠ [] → x[0] = x.head
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).head = sf(n0), slf(n0).last = sf(n0 + 1), ii(0) = 0, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ sf(n0 + 1) = slf(n0 + 1).head ∧ slf(n0) ≠ []
Used simplifier rules: not-finfrag-empty: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); Used terms: slf(n0)
| ⊦ x ≠ [] → x[0] = x.head |
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).head = sf(n0), slf(n0).last = sf(n0 + 1), ii(0) = 0, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ sf(n0 + 1) = slf(n0 + 1).head ∧ slf(n0) ≠ [] |
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).head = sf(n0), slf(n0).last = sf(n0 + 1), ii(0) = 0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).head = sf(n0), slf(n0).last = sf(n0 + 1), ii(0) = 0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), ii(0) = 0, s = sf(n0), slf(n0) = s + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: slf(n0), s, x0
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), ii(0) = 0, s = sf(n0), slf(n0) = s + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ |
ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
ext !(alf(n0)) = cext !(caf(n0) '), ext !(alf(n0 + 1)) = cext !(caf(n0 + 1) '), slf(n0).last = sf(n0 + 1), slf(n0 + 1).last = sf((n0 + 1) + 1), slf(n0 + 1)[0] = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), frag*(IOAut(start, step, ext))(slf(n0 + 1), alf(n0 + 1)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦
Used terms: n0 + 1
| ext !(alf(n0)) = cext !(caf(n0) '), ext !(alf(n0 + 1)) = cext !(caf(n0 + 1) '), slf(n0).last = sf(n0 + 1), slf(n0 + 1).last = sf((n0 + 1) + 1), slf(n0 + 1)[0] = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), frag*(IOAut(start, step, ext))(slf(n0 + 1), alf(n0 + 1)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ |
ext !(alf(n0 + 1)) = cext !(caf(n0 + 1) '), ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0 + 1).last = sf(2 + n0), slf(n0 + 1)[0] = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0 + 1), alf(n0 + 1)), frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ext !(alf(n0 + 1)) = cext !(caf(n0 + 1) '), ext !(alf(n0)) = cext !(caf(n0) '), slf(n0).last = sf(n0 + 1), slf(n0 + 1).last = sf(2 + n0), slf(n0 + 1)[0] = sf(n0 + 1), ii(0) = 0, slf(n0) = sf(n0) ' + x0, sf(n0 + 1) ≠ slf(n0 + 1).head, slf(n0) ≠ [], frag*(IOAut(start, step, ext))(slf(n0 + 1), alf(n0 + 1)), frag*(IOAut(start, step, ext))(slf(n0), alf(n0)), start(sf(0)), sf(n0) ∈ slf(n0), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ |
⊦ x ≠ [] → x[0] = x.head
Used simplifier rules: not-finfrag-empty: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); Used terms: slf(n0 + 1)
| ⊦ x ≠ [] → x[0] = x.head |
| ii(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (finp(α) ⊃ # α = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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(0) = 0, ii0(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| ii(0) = 0, ii0(0) = 0, start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), (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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α))
ii(0) = 0, ii0(0) = 0, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), ∀ σ, α. ¬(cext !(⌜caf⌝ ) = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) ⊦
Used terms: start, step, ext, cext !(⌜caf⌝ )
| ⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) |
| ii(0) = 0, ii0(0) = 0, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), ∀ σ, α. ¬(cext !(⌜caf⌝ ) = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) ⊦ |
ii(0) = 0, ii0(0) = 0, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ σ0, α0. cext !(⌜caf⌝ ) ≠ ext !(α0) ∨ ¬ frag(IOAut(start, step, ext))(σ0, α0) ∨ ¬ start(σ0[0]) ⊦
Used simplifier rules: exec: ⊦ exec(ioa)(σ, α) ↔ frag(ioa)(σ, α) ∧ ioa.start(σ[0]); ⊦ IOAut(start, step, ext).start = start; (s)
| ii(0) = 0, ii0(0) = 0, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ σ0, α0. cext !(⌜caf⌝ ) ≠ ext !(α0) ∨ ¬ frag(IOAut(start, step, ext))(σ0, α0) ∨ ¬ start(σ0[0]) ⊦ |
ii(0) = 0, ii0(0) = 0, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
Used terms: σ, α
| ii(0) = 0, ii0(0) = 0, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0 = ii, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
ii(0) = 0, ii0(0) = 0, ii0 ≠ ii, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
Used formulas: ii0 = ii
| ii(0) = 0, ii0(0) = 0, ii0 = ii, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
| ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
ii(0) = 0, # σ ≠ # α + ⌜1⌝ , start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
Used formulas: # σ = # α + ⌜1⌝
| # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
Used formulas: cext !(⌜caf⌝ ) ≠ ext !(α)
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. cext !(⌜caf.take(n)⌝ ) = ext !(⌜α.take(ii(n))⌝ ) ⊦
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∀ n. cext !(⌜caf.take(n)⌝ ) = ext !(⌜α.take(ii(n))⌝ )
Used formulas: ∀ n. cext !(⌜caf.take(n)⌝ ) = ext !(⌜α.take(ii(n))⌝ )
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. cext !(⌜caf.take(n)⌝ ) = ext !(⌜α.take(ii(n))⌝ ) ⊦ |
# σ = # ⌜al⌝ + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜al⌝ ), start(sf(0)), (finp(⌜al⌝ ) ⊃ # ⌜al⌝ = ⌜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. cext !(⌜caf.take(n)⌝ ) = ext !(⌜⌜al⌝ .take(ii(n))⌝ ), ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # ⌜al⌝ < ⌜ii(n + 1)⌝ ∧ ⌜al⌝ .drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
# σ = # ⌜af⌝ + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), (finp(⌜af⌝ ) ⊃ # ⌜af⌝ = ⌜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. cext !(⌜caf.take(n)⌝ ) = ext !(⌜⌜af⌝ .take(ii(n))⌝ ), ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # ⌜af⌝ < ⌜ii(n + 1)⌝ ∧ ⌜af⌝ .drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| # σ = # ⌜al⌝ + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜al⌝ ), start(sf(0)), (finp(⌜al⌝ ) ⊃ # ⌜al⌝ = ⌜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. cext !(⌜caf.take(n)⌝ ) = ext !(⌜⌜al⌝ .take(ii(n))⌝ ), ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # ⌜al⌝ < ⌜ii(n + 1)⌝ ∧ ⌜al⌝ .drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
# σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ σ.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦
Used simplifier rules: ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ finp(⌜x⌝ ); (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (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-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 ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)
| # σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ σ.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ |
# al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, σ = ⌜sl⌝ , cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), (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 → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ σ.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ 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: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜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
| # al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, σ = ⌜sl⌝ , cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), (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 → alf(m) = [] ∧ ii(m) = ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ σ.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ 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(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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: 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 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)
| # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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) ⊦ |
cext !(caf.take(n)) = ext !(al.take(ii(n))), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used terms: n
| cext !(caf.take(n)) = ext !(al.take(ii(n))), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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: ⊦ # x = n → x.take(n) = x; (s)
| cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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) ⊦ |
cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ⌜el⌝ = ext !(⌜al⌝ ), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s)
| cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, ⌜el⌝ = ext !(⌜al⌝ ), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| cext !(caf.take(n)) = ext !(al), # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ 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), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
cext !(x0) = ext !(al), # al = ii(n), # x0 = n, ii(n) + 1 = # sl, caf = (⌜x0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: caf, n, x0, nf0
| cext !(x0) = ext !(al), # al = ii(n), # x0 = n, ii(n) + 1 = # sl, caf = (⌜x0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ii(n0) = ii(n), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ , start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ ii(n) < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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) ⊦ |
cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(0) = 0, ii(n0) = # al, cext !(⌜nf0⌝ ) ≠ [], start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ σ + σ0 = σ ↔ σ0 = [] ∨ # σ = ∞; (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(0) = 0, ii(n0) = # al, cext !(⌜nf0⌝ ) ≠ [], start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
⊦ ext !(α) = [] ↔ (∀ n. ⌜n⌝ < # α → ext(α[n]) = None)
cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(n0) = # al, ii(0) = 0, start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∃ n. ¬(⌜n⌝ < # ⌜nf0⌝ → cext(⌜nf0⌝ [n]) = None) ⊦
Used terms: cext, ⌜nf0⌝
| ⊦ ext !(α) = [] ↔ (∀ n. ⌜n⌝ < # α → ext(α[n]) = None) |
| cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(n0) = # al, ii(0) = 0, start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∃ n. ¬(⌜n⌝ < # ⌜nf0⌝ → cext(⌜nf0⌝ [n]) = None) ⊦ |
cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(0) = 0, ii(n0) = # al, cext(nf0(n)) ≠ None, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜nf⌝ [n] = nf(n); (s)
| cext !(x0) = ext !(al), # al = ii(# x0), # al + 1 = # sl, ii(0) = 0, ii(n0) = # al, cext(nf0(n)) ≠ None, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
cext !(x0) = ext !(al), ext !(alf(# x0 + n)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(# x0 + n) '), # al = ii(# x0), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(n0) = # al, ii(0) = 0, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used terms: # x0 + n
| cext !(x0) = ext !(al), ext !(alf(# x0 + n)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(# x0 + n) '), # al = ii(# x0), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(n0) = # al, ii(0) = 0, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
ext !(alf(# x0 + n)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(# x0 + n) '), cext !(x0) = ext !(al), cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(# x0 + n)) = ext !(al.take(ii(# x0 + n))), # al = ii(# x0), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(0) = 0, ii(n0) = # al, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used terms: # x0 + n
| ext !(alf(# x0 + n)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(# x0 + n) '), cext !(x0) = ext !(al), cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(# x0 + n)) = ext !(al.take(ii(# x0 + n))), # al = ii(# x0), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(0) = 0, ii(n0) = # al, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
cext !(x0) = ext !(al), ext !(alf(# x0 + n)) = cext(nf0(n)).get ', # al = ii(# x0), # al + 1 = # sl, ext !(al) + cext !(nf0.take(n)) = ext !(al.take(ii(# x0 + n))), slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(n0) = # al, ii(0) = 0, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
Used simplifier rules: ⊦ ext(a) ≠ None → ext !(a ') = ext(a).get '; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜x⌝ + ⌜nf⌝ ).f(# x + n) = nf(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) ⊦ (⌜x⌝ + ⌜nf⌝ ).f.take(# x + n) = x + nf.take(n); (s)
| cext !(x0) = ext !(al), ext !(alf(# x0 + n)) = cext(nf0(n)).get ', # al = ii(# x0), # al + 1 = # sl, ext !(al) + cext !(nf0.take(n)) = ext !(al.take(ii(# x0 + n))), slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(n0) = # al, ii(0) = 0, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
ext !(alf(# x0 + n)) = cext(nf0(n)).get ', cext !(x0) = ext !(al), # al = ii(# x0), # x = n, ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + n))), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(0) = 0, ii(n0) = # al, nf0 = (⌜x⌝ + ⌜nf1⌝ ).f, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: nf0, n, x, nf1
| ext !(alf(# x0 + n)) = cext(nf0(n)).get ', cext !(x0) = ext !(al), # al = ii(# x0), # x = n, ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + n))), # al + 1 = # sl, slf(# x0 + n).last = sf((# x0 + n) + 1), slf(# x0 + n)[0] = sf(# x0 + n), ii(0) = 0, ii(n0) = # al, nf0 = (⌜x⌝ + ⌜nf1⌝ ).f, cext(nf0(n)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + n), alf(# x0 + n)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜nf0⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
cext !(x0) = ext !(al), ext !(alf(# x0 + # x)) = cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)).get ', # al = ii(# x0), # al + 1 = # sl, ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), ii(n0) = # al, ii(0) = 0, cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦
| cext !(x0) = ext !(al), ext !(alf(# x0 + # x)) = cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)).get ', # al = ii(# x0), # al + 1 = # sl, ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), ii(n0) = # al, ii(0) = 0, cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al, ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f(n) '), sf(n + 1)), ∀ n1. cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1) ⊦ |
ext !(alf(# x0 + # x)) = e ', cext !(x0) = ext !(al), # al = ii(# x0), ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), # al + 1 = # sl, slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) = Some(e), ii(0) = 0, ii(n0) = # al, cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)), e
| ext !(alf(# x0 + # x)) = e ', cext !(x0) = ext !(al), # al = ii(# x0), ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), # al + 1 = # sl, slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) = Some(e), ii(0) = 0, ii(n0) = # al, cext((⌜x⌝ + ⌜nf1⌝ ).f(# x)) ≠ None, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜(⌜x⌝ + ⌜nf1⌝ ).f⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
ext !(alf(# x0 + # x)) = e ', cext !(x0) = ext !(al), # al = ii(# x0), ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), # al + 1 = # sl, slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), cext(((x + nf1))(# x)) = Some(e), ii(0) = 0, ii(n0) = # al, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ n1. cext !((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), (cext((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f(n)) = None ⊃ [];cext((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f(n)).get '), sf(n + 1)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| ext !(alf(# x0 + # x)) = e ', cext !(x0) = ext !(al), # al = ii(# x0), ext !(al) + cext !(x) = ext !(al.take(ii(# x0 + # x))), # al + 1 = # sl, slf(# x0 + # x).last = sf((# x0 + # x) + 1), slf(# x0 + # x)[0] = sf(# x0 + # x), cext(((x + nf1))(# x)) = Some(e), ii(0) = 0, ii(n0) = # al, frag*(IOAut(start, step, ext))(slf(# x0 + # x), alf(# x0 + # x)), start(sf(0)), ∀ n1. cext !((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f.take(n1)) = ext !(al.take(ii(n1))), ∀ n. move(IOAut(start, step, ext))(sf(n), (cext((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f(n)) = None ⊃ [];cext((⌜x0⌝ + ⌜x⌝ + ⌜nf1⌝ ).f(n)).get '), sf(n + 1)), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ # al < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # al < ii(n1 + 1) ∧ al.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m. # x0 ≤ m → alf(m) = [] ∧ ii(m) = # al, ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = # al ⊦ |
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 ⊦ # x = n → x.take(n) = x; (s) ⊦ x = x + y ↔ y = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !([]) = []; (s) ⊦ a ' ≠ []; (s) Used terms: # x0 + # x
| # σ = # ⌜af⌝ + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), (finp(⌜af⌝ ) ⊃ # ⌜af⌝ = ⌜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. cext !(⌜caf.take(n)⌝ ) = ext !(⌜⌜af⌝ .take(ii(n))⌝ ), ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # ⌜af⌝ < ⌜ii(n + 1)⌝ ∧ ⌜af⌝ .drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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⌝ = ∞; (s) ⊦ ⌜m⌝ < ∞; (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) ⊦ ¬ finp(⌜nf⌝ ); (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s)
| ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used formulas: cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ )
| ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2); (s) Used formulas: ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ )
| ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ii(0) = 0, ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ ext !(α) = ⌜el⌝ ↔ (∃ al, α0. α = ⌜al⌝ + α0 ∧ ext !(al) = el ∧ ext !(α0) = [])
ii(0) = 0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ ext !(al) = el ∧ ext !(α0) = [] ⊦
Used terms: ext, ⌜af⌝ , el
| ⊦ ext !(α) = ⌜el⌝ ↔ (∃ al, α0. α = ⌜al⌝ + α0 ∧ ext !(al) = el ∧ ext !(α0) = []) |
| ii(0) = 0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ ext !(al) = el ∧ ext !(α0) = [] ⊦ |
ext !(α0) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + α0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ext !(α0) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + α0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(α0) = [], ii(0) = 0, α0 = ⌜af0⌝ , ⌜af⌝ = ⌜al⌝ + α0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ σ0 + ⌜x⌝ = ⌜nf0⌝ ↔ σ0 = ⌜nf0⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| ext !(α0) = [], ii(0) = 0, α0 = ⌜af0⌝ , ⌜af⌝ = ⌜al⌝ + α0, start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ext !(⌜al⌝ + ⌜af0⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ext !(⌜al⌝ + ⌜af0⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2)
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ + ext !(⌜af0⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: ext, al, ⌜af0⌝
| ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2) |
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ + ext !(⌜af0⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s)
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ m. ii(m) ≤ # al ∧ # al < ii(m + 1) ⊦
Used terms: # al
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , start(sf(0)), ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∃ m. ii(m) ≤ # al ∧ # al < ii(m + 1) ⊦ |
ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.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 f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ext !(⌜af0⌝ ) = [], ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ext !(⌜af0⌝ ) = [], cext !(caf.take(m + 1)) = ext !(af.take(ii(m + 1))), ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , # al < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: m + 1
| ext !(⌜af0⌝ ) = [], cext !(caf.take(m + 1)) = ext !(af.take(ii(m + 1))), ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , # al < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(x0) = ext !(af.take(ii(m + 1))), ext !(⌜af0⌝ ) = [], # x0 = m + 1, caf = (⌜x0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: caf, m + 1, x0, nf0
| cext !(x0) = ext !(af.take(ii(m + 1))), ext !(⌜af0⌝ ) = [], # x0 = m + 1, caf = (⌜x0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(af.take(ii(m + 1))), # x0 = m + 1, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , # al < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜cext !(x0)⌝ + cext !(⌜nf0⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(af.take(ii(m + 1))), # x0 = m + 1, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , # al < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜cext !(x0)⌝ + cext !(⌜nf0⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), af = (⌜al0⌝ + ⌜af1⌝ ).f, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜cext !(x0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, ii(m + 1), al0, af1
| cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), af = (⌜al0⌝ + ⌜af1⌝ ).f, ii(0) = 0, ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , ii(m) < ii(m + 1), # al < ii(m + 1), start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜cext !(x0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), ⌜al0⌝ + ⌜af1⌝ = ⌜al⌝ + ⌜af0⌝ , ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), ⌜al0⌝ + ⌜af1⌝ = ⌜al⌝ + ⌜af0⌝ , ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(al0), #(⌜al⌝ + ⌜af0⌝ ) = #(⌜al0⌝ + ⌜af1⌝ ), # al0 = ii(m + 1), # x0 = m + 1, ii(0) = 0, al0 ≠ [], # al < # al0, ii(m) < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ #(⌜al⌝ + ⌜af0⌝ ) < ⌜n⌝ → (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦
Used terms: ⌜al0⌝ + ⌜af1⌝ , ⌜al⌝ + ⌜af0⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(al0), #(⌜al⌝ + ⌜af0⌝ ) = #(⌜al0⌝ + ⌜af1⌝ ), # al0 = ii(m + 1), # x0 = m + 1, ii(0) = 0, al0 ≠ [], # al < # al0, ii(m) < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ #(⌜al⌝ + ⌜af0⌝ ) < ⌜n⌝ → (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦ |
cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream 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) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦ |
ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(al0), # al0 = ii(m + 1), # x0 = m + 1, (⌜al⌝ + ⌜af0⌝ ).take(# al0) = (⌜al0⌝ + ⌜af1⌝ ).take(# al0), ii(0) = 0, al0 ≠ [], # al < # al0, ii(m) < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: # al0
| ext !(⌜af0⌝ ) = [], cext !(x0) = ext !(al0), # al0 = ii(m + 1), # x0 = m + 1, (⌜al⌝ + ⌜af0⌝ ).take(# al0) = (⌜al0⌝ + ⌜af1⌝ ).take(# al0), ii(0) = 0, al0 ≠ [], # al < # al0, ii(m) < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), al + af0.take(# al0 - # al) = al0, ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + σ).take(# x) = x; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ # x < m → (⌜x⌝ + σ).take(m) = x + σ.take(m - # x); (s)
| cext !(x0) = ext !(al0), ext !(⌜af0⌝ ) = [], # x0 = m + 1, # al0 = ii(m + 1), al + af0.take(# al0 - # al) = al0, ii(0) = 0, al0 ≠ [], ii(m) < # al0, # al < # al0, start(sf(0)), ii(m) ≤ # al, ¬ ⌜ext !(al)⌝ ⊑ ⌜ext !(al0)⌝ + cext !(⌜nf0⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜nf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜af0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. (⌜al⌝ + ⌜af0⌝ ).take(n) = (⌜al0⌝ + ⌜af1⌝ ).take(n) ⊦ |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ nf.take(n) = [] ↔ n = 0; (s) ⊦ m ≤ m + n; (s) ⊦ #(x + y) = # x + # y; (s) ⊦ # nf.take(n) = n; (s) ⊦ m < m + n ↔ n ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ σ1 ⊑ σ1 + σ2; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # al0, # al, n2
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ext !(⌜af⌝ ) ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef⌝ = # ext !(⌜af⌝ ), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦
Used terms: ⌜ef⌝ , ext !(⌜af⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef⌝ = # ext !(⌜af⌝ ), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦ |
ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ef.take(n) = ext !(⌜af⌝ ).take(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ef.take(n) = ext !(⌜af⌝ ).take(n) ⊦ |
ef.take(# el + 1) = ext !(⌜af⌝ ).take(# el + 1), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: # el + 1
| ef.take(# el + 1) = ext !(⌜af⌝ ).take(# el + 1), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
ef.take(# el + 1) = ext !(⌜af⌝ ).take(# el + 1), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ¬ # ext !(⌜af⌝ ) < ⌜# el + 1⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(# el + 1) = ext !(⌜af⌝ .take(m))), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: ext, ⌜af⌝ , # el + 1
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ef.take(# el + 1) = ext !(⌜af⌝ ).take(# el + 1), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ¬ # ext !(⌜af⌝ ) < ⌜# el + 1⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(# el + 1) = ext !(⌜af⌝ .take(m))), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ef.take(# el + 1) = ext !(af.take(m)), ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(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 ⊦ # σ < ⌜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)
| ef.take(# el + 1) = ext !(af.take(m)), ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ef.take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m0. ii(m0) ≤ m ∧ m < ii(m0 + 1) ⊦
Used terms: m
| ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ef.take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∃ m0. ii(m0) ≤ m ∧ m < ii(m0 + 1) ⊦ |
ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ef.take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), m < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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
| ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ef.take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), m < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m0 + 1)) = ext !(af.take(ii(m0 + 1))), ef.take(# el + 1) = ext !(af.take(m)), ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), m < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: m0 + 1
| cext !(caf.take(m0 + 1)) = ext !(af.take(ii(m0 + 1))), ef.take(# el + 1) = ext !(af.take(m)), ext !(⌜af⌝ ).take(# el + 1) = ext !(af.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), m < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(caf.take(m0 + 1)) = ext !(af.take(ii(m0 + 1))), # al = m, ext !(⌜af⌝ ).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), m < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, m, al, nf0
| cext !(caf.take(m0 + 1)) = ext !(af.take(ii(m0 + 1))), # al = m, ext !(⌜af⌝ ).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), m < ii(m0 + 1), start(sf(0)), ii(m0) ≤ m, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m0 + 1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(m0 + 1))), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), # al < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(caf.take(m0 + 1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(m0 + 1))), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), # al < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ # x ≤ n → (⌜x⌝ + ⌜nf⌝ ).f.take(n) = x + nf.take(n - # x)
cext !(caf.take(m0 + 1)) = ext !(al + nf0.take(ii(m0 + 1) - # al)), # ext !(⌜nf0⌝ ) = ∞, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), # al < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, # al ≤ ii(m0 + 1), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: al, nf0, ii(m0 + 1)
| ⊦ # x ≤ n → (⌜x⌝ + ⌜nf⌝ ).f.take(n) = x + nf.take(n - # x) |
| cext !(caf.take(m0 + 1)) = ext !(al + nf0.take(ii(m0 + 1) - # al)), # ext !(⌜nf0⌝ ) = ∞, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), # al < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, # al ≤ ii(m0 + 1), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(ii(m0 + 1) - # al)), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), # al < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s)
| cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(ii(m0 + 1) - # al)), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), # al < ii(m0 + 1), ii(m0) < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), # al < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, # al ≤ ii(m0 + 1), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: ii(m0 + 1), # al, n2
| cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜el⌝ = cext !(⌜caf⌝ ), ii(m0) < ii(m0 + 1), # al < ii(m0 + 1), start(sf(0)), ii(m0) ≤ # al, # al ≤ ii(m0 + 1), ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| cext !(caf.take(m0 + 1)) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), caf = (⌜x0⌝ + ⌜caf0⌝ ).f, ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜el⌝ = cext !(⌜caf⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: caf, m0 + 1, x0, caf0
| cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), caf = (⌜x0⌝ + ⌜caf0⌝ ).f, ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜el⌝ = cext !(⌜caf⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜el⌝ = ⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜el⌝ = ⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # ⌜el⌝ = #(⌜cext !(x0)⌝ + cext !(⌜caf0⌝ )), # ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < # ⌜el⌝ → ⌜el⌝ [n] = (⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ))[n] ⊦
Used terms: ⌜el⌝ , ⌜cext !(x0)⌝ + cext !(⌜caf0⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # ⌜el⌝ = #(⌜cext !(x0)⌝ + cext !(⌜caf0⌝ )), # ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < # ⌜el⌝ → ⌜el⌝ [n] = (⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ))[n] ⊦ |
cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜# el⌝ = ⌜# cext !(x0)⌝ + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. n < # el → el[n] = (⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ))[n] ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(x0) = ext !(al) + ext !(nf0.take(n2)), # x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜# el⌝ = ⌜# cext !(x0)⌝ + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. n < # el → el[n] = (⌜cext !(x0)⌝ + cext !(⌜caf0⌝ ))[n] ⊦ |
# ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜# el⌝ = ⌜#(ext !(al) + ext !(nf0.take(n2)))⌝ + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. n < # el → el[n] = (⌜ext !(al) + ext !(nf0.take(n2))⌝ + cext !(⌜caf0⌝ ))[n], ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| # ext !(⌜nf0⌝ ) = ∞, # x0 = m0 + 1, (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ii(m0 + 1) = n2 + # al, ⌜# el⌝ = ⌜#(ext !(al) + ext !(nf0.take(n2)))⌝ + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. n < # el → el[n] = (⌜ext !(al) + ext !(nf0.take(n2))⌝ + cext !(⌜caf0⌝ ))[n], ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜# el⌝ = (⌜# ext !(al)⌝ + ⌜# ext !(nf0.take(n2))⌝ ) + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. n < # el → el[n] = ((⌜ext !(al)⌝ + ⌜ext !(nf0.take(n2))⌝ ) + cext !(⌜caf0⌝ ))[n] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ #(x + y) = # x + # y; (s)
| # x0 = m0 + 1, # ext !(⌜nf0⌝ ) = ∞, ef.take(# el + 1) = ext !(al), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(# el + 1) = ext !(al), ii(m0 + 1) = n2 + # al, ii(0) = 0, ⌜# el⌝ = (⌜# ext !(al)⌝ + ⌜# ext !(nf0.take(n2))⌝ ) + # cext !(⌜caf0⌝ ), n2 ≠ 0, ii(m0) < n2 + # al, start(sf(0)), ii(m0) ≤ # al, ¬ ⌜ef⌝ ⊑ ⌜el⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜x0⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. n < # el → el[n] = ((⌜ext !(al)⌝ + ⌜ext !(nf0.take(n2))⌝ ) + cext !(⌜caf0⌝ ))[n] ⊦ |
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s) ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; (ws) 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(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ cext !(⌜caf⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜ef0⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ⌜ef0⌝ , ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ β. ⌜ef⌝ + β ≠ ⌜ef0⌝ ⊦
Used terms: ⌜ef⌝ , ⌜ef0⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ β. ⌜ef⌝ + β ≠ ⌜ef0⌝ ⊦ |
ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜nf⌝ + σ = ⌜nf⌝ ; (s)
| ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ef.take(n) = ef0.take(n) ⊦
ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∀ n. ef.take(n) = ef0.take(n)
Used formulas: ∀ n. ef.take(n) = ef0.take(n)
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ef.take(n) = ef0.take(n) ⊦ |
ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ef.take(n) = ef0.take(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ef.take(n) = ef0.take(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ef.take(n + 1) = ef0.take(n + 1), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: n + 1
| ef.take(n + 1) = ef0.take(n + 1), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
ef.take(n) + ef(n) ' = ef0.take(n + 1), ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: ef, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ef.take(n) + ef(n) ' = ef0.take(n + 1), ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ef.take(n) + ef(n) ' = ef0.take(n + 1), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ef(n) ∈ ef0.take(n + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list
| ef.take(n) + ef(n) ' = ef0.take(n + 1), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ef(n) ∈ ef0.take(n + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ x + a ' = y + a0 ' ↔ x = y ∧ a = a0; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: ef0, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef0⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∀ n. ef.take(n) = ef0.take(n) |
ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜ef0⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef0⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef0⌝ < ⌜n⌝ → ⌜ef0⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦
Used terms: ⌜ef0⌝ , cext !(⌜caf⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef0⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef0⌝ < ⌜n⌝ → ⌜ef0⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦ |
ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef⌝ = # ext !(⌜af⌝ ), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦
Used terms: ⌜ef⌝ , ext !(⌜af⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef⌝ = # ext !(⌜af⌝ ), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦ |
ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦ |
ef0.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: n
| ef0.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ef0.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = ext !(⌜af⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: n
| ef0.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = ext !(⌜af⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ef0.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ef0.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(⌜caf⌝ ).take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(⌜caf⌝ ).take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(⌜caf⌝ ).take(n), ef ≠ ef0, start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(n) = cext !(⌜caf⌝ .take(m))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: cext, ⌜caf⌝ , n
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(⌜caf⌝ ).take(n), ef ≠ ef0, start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(n) = cext !(⌜caf⌝ .take(m))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ # ⌜nf⌝ = ∞; (s)
| cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: m
| cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m)) = ext !(al), # al = ii(m), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, ii(m), al, nf0
| cext !(caf.take(m)) = ext !(al), # al = ii(m), cext !(⌜caf⌝ ).take(n) = cext !(caf.take(m)), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ext !(⌜af⌝ ).take(n) ≠ cext !(caf.take(m)), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(caf.take(m)) = ext !(al), # al = ii(m), # ext !(⌜nf0⌝ ) = ∞, cext !(⌜caf⌝ ).take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(n) ≠ ext !(al), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(caf.take(m)) = ext !(al), # al = ii(m), # ext !(⌜nf0⌝ ) = ∞, cext !(⌜caf⌝ ).take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), (⌜ext !(al)⌝ + ext !(⌜nf0⌝ )).take(n) ≠ ext !(al), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ ¬ ∞ < n∞; (s) m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]; (s) ⊦ (⌜x⌝ + σ).take(# x) = x; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: cext !(⌜caf⌝ ).take(n), ext !(al)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ⌜el⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜el⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜el⌝ = cext !(⌜caf⌝ ), ⌜el⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜el⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ el ≠ [] → (ext !(⌜af⌝ ) = ⌜el⌝ ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = []))
ii(0) = 0, el ≠ [], ⌜el⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜el⌝ ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∃ _al, caf0. ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ ∧ _al ≠ [] ∧ cext !(_al) = el ∧ Some(el.last) = cext(_al.last) ∧ cext !(⌜caf0⌝ ) = [] ⊦
Used simplifier rules: ⊦ ⌜[]⌝ = []; (s) ⊦ [] ⊑ σ; (s) Used terms: el, cext, caf
| ⊦ el ≠ [] → (ext !(⌜af⌝ ) = ⌜el⌝ ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = [])) |
| ii(0) = 0, el ≠ [], ⌜el⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜el⌝ ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∃ _al, caf0. ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ ∧ _al ≠ [] ∧ cext !(_al) = el ∧ Some(el.last) = cext(_al.last) ∧ cext !(⌜caf0⌝ ) = [] ⊦ |
cext !(⌜caf0⌝ ) = [], Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| cext !(⌜caf0⌝ ) = [], Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(⌜caf0⌝ ) = [], cext !(caf.take(# _al)) = ext !(af.take(ii(# _al))), Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: # _al
| cext !(⌜caf0⌝ ) = [], cext !(caf.take(# _al)) = ext !(af.take(ii(# _al))), Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(_al0) = ext !(af.take(ii(# _al))), cext !(⌜caf0⌝ ) = [], # _al0 = # _al, Some(cext !(_al).last) = cext(_al.last), caf = (⌜_al0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: caf, # _al, _al0, nf0
| cext !(_al0) = ext !(af.take(ii(# _al))), cext !(⌜caf0⌝ ) = [], # _al0 = # _al, Some(cext !(_al).last) = cext(_al.last), caf = (⌜_al0⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ⌜caf⌝ = ⌜_al⌝ + ⌜caf0⌝ , cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(_al) = ext !(af.take(ii(# _al))), cext !(⌜caf0⌝ ) = [], Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜_al⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜_al⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s) ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| cext !(_al) = ext !(af.take(ii(# _al))), cext !(⌜caf0⌝ ) = [], Some(cext !(_al).last) = cext(_al.last), ii(0) = 0, cext !(_al) ≠ [], _al ≠ [], ⌜cext !(_al)⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜cext !(_al)⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !((⌜_al⌝ + ⌜caf0⌝ ).f(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !((⌜_al⌝ + ⌜caf0⌝ ).f(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
Used simplifier rules: ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ σ + σ0 = σ ↔ σ0 = [] ∨ # σ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ σ1 ⊑ σ1 + σ2; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, ii(# _al), al, nf0
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ cext !(⌜caf⌝ ) ⊑ ext !(⌜af⌝ ), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ¬ ⌜ef⌝ ⊑ ext !(⌜af⌝ ), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ β. ⌜ef⌝ + β ≠ ext !(⌜af⌝ ) ⊦
Used terms: ⌜ef⌝ , ext !(⌜af⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ β. ⌜ef⌝ + β ≠ ext !(⌜af⌝ ) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜nf⌝ + σ = ⌜nf⌝ ; (s)
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s)
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦
Used terms: ⌜ef⌝ , cext !(⌜caf⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦ |
ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ef.take(n) = cext !(⌜caf⌝ ).take(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ef.take(n) = cext !(⌜caf⌝ ).take(n) ⊦ |
ef.take(# el + 1) = cext !(⌜caf⌝ ).take(# el + 1), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: # el + 1
| ef.take(# el + 1) = cext !(⌜caf⌝ ).take(# el + 1), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
ef.take(# el + 1) = cext !(⌜caf⌝ ).take(# el + 1), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜# el + 1⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(# el + 1) = cext !(⌜caf⌝ .take(m))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: cext, ⌜caf⌝ , # el + 1
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ef.take(# el + 1) = cext !(⌜caf⌝ ).take(# el + 1), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜# el + 1⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(# el + 1) = cext !(⌜caf⌝ .take(m))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ef.take(# el + 1) = cext !(caf.take(m)), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(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 ⊦ # σ < ⌜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)
| ef.take(# el + 1) = cext !(caf.take(m)), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), ef.take(# el + 1) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: m
| cext !(caf.take(m)) = ext !(af.take(ii(m))), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), ef.take(# el + 1) = cext !(caf.take(m)), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
cext !(caf.take(m)) = ext !(al), # al = ii(m), ef.take(# el + 1) = cext !(caf.take(m)), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, ii(m), al, nf0
| cext !(caf.take(m)) = ext !(al), # al = ii(m), ef.take(# el + 1) = cext !(caf.take(m)), cext !(⌜caf⌝ ).take(# el + 1) = cext !(caf.take(m)), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(m)) = ext !(al), # al = ii(m), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ⌜ext !(al)⌝ + ext !(⌜nf0⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| cext !(caf.take(m)) = ext !(al), # al = ii(m), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ef.take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜el⌝ = ⌜ext !(al)⌝ + ext !(⌜nf0⌝ ), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
cext !(caf.take(m)) = ext !(al), #(⌜ext !(al)⌝ + ext !(⌜nf0⌝ )) = # ⌜el⌝ , # al = ii(m), ef.take(# el + 1) = ext !(al), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < #(⌜ext !(al)⌝ + ext !(⌜nf0⌝ )) → (⌜ext !(al)⌝ + ext !(⌜nf0⌝ ))[n] = ⌜el⌝ [n] ⊦
Used terms: ⌜el⌝ , ⌜ext !(al)⌝ + ext !(⌜nf0⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| cext !(caf.take(m)) = ext !(al), #(⌜ext !(al)⌝ + ext !(⌜nf0⌝ )) = # ⌜el⌝ , # al = ii(m), ef.take(# el + 1) = ext !(al), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ⌜n⌝ < #(⌜ext !(al)⌝ + ext !(⌜nf0⌝ )) → (⌜ext !(al)⌝ + ext !(⌜nf0⌝ ))[n] = ⌜el⌝ [n] ⊦ |
cext !(caf.take(m)) = ext !(al), # al = ii(m), ⌜# ext !(al)⌝ + # ext !(⌜nf0⌝ ) = ⌜# el⌝ , ef.take(# el + 1) = ext !(al), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # el → (⌜ext !(al)⌝ + ext !(⌜nf0⌝ ))[n] = el[n] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(caf.take(m)) = ext !(al), # al = ii(m), ⌜# ext !(al)⌝ + # ext !(⌜nf0⌝ ) = ⌜# el⌝ , ef.take(# el + 1) = ext !(al), cext !(⌜caf⌝ ).take(# el + 1) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # el → (⌜ext !(al)⌝ + ext !(⌜nf0⌝ ))[n] = el[n] ⊦ |
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s) ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; (ws) ⊦ # σ = ⌜0⌝ ↔ σ = []; (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(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af⌝ ), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s)
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ef.take(n) = ef0.take(n) ⊦
ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ ∀ n. ef.take(n) = ef0.take(n)
Used formulas: ∀ n. ef.take(n) = ef0.take(n)
| ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ef.take(n) = ef0.take(n) ⊦ |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ef.take(n) = ef0.take(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ef.take(n) = ef0.take(n), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ef.take(n + 1) = ef0.take(n + 1), ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: n + 1
| ef.take(n + 1) = ef0.take(n + 1), ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
ef.take(n + 1) = ef0.take(n) + ef0(n) ', ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: ef0, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ef.take(n + 1) = ef0.take(n) + ef0(n) ', ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ef.take(n + 1) = ef0.take(n) + ef0(n) ', ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ef0(n) ∈ ef.take(n + 1), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list
| ef.take(n + 1) = ef0.take(n) + ef0(n) ', ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef(n) ≠ ef0(n), start(sf(0)), ef0(n) ∈ ef.take(n + 1), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ x + a ' = y + a0 ' ↔ x = y ∧ a = a0; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: ef, n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = cext !(⌜caf⌝ ), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ ∀ n. ef.take(n) = ef0.take(n) |
ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ii(0) = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦
Used terms: ⌜ef⌝ , cext !(⌜caf⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef⌝ = # cext !(⌜caf⌝ ), ii(0) = 0, ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = cext !(⌜caf⌝ ).take(n) ⊦ |
ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦ |
ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: n
| ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ⌜ef0⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
# ⌜ef0⌝ = # ext !(⌜af⌝ ), ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ¬ # ⌜ef0⌝ < ⌜n⌝ → ⌜ef0⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦
Used terms: ⌜ef0⌝ , ext !(⌜af⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| # ⌜ef0⌝ = # ext !(⌜af⌝ ), ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ¬ # ⌜ef0⌝ < ⌜n⌝ → ⌜ef0⌝ .take(n) = ext !(⌜af⌝ ).take(n) ⊦ |
ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(n) = cext !(⌜caf⌝ .take(m))), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦
Used terms: cext, ⌜caf⌝ , n
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ¬ # cext !(⌜caf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜caf⌝ < ⌜m⌝ ∧ cext !(⌜caf⌝ ).take(n) = cext !(⌜caf⌝ .take(m))), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦ |
ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n1. cext !(caf.take(n1)) = ext !(af.take(ii(n1))), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦ |
cext !(caf.take(m)) = ext !(af.take(ii(m))), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦
Used terms: m
| cext !(caf.take(m)) = ext !(af.take(ii(m))), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦ |
ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(af.take(ii(m))), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦
| ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(af.take(ii(m))), ii(0) = 0, ∞ = # ext !(⌜af⌝ ), ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0) ⊦ |
# al = ii(m), ef.take(n) = ext !(al), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, ii(m), al, nf0
| # al = ii(m), ef.take(n) = ext !(al), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), af = (⌜al⌝ + ⌜nf0⌝ ).f, ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ∞ = # ext !(⌜af⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ af.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n0. ef0.take(n0) = ext !(⌜af⌝ ).take(n0) ⊦ |
# al = ii(m), # ext !(⌜nf0⌝ ) = ∞, ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| # al = ii(m), # ext !(⌜nf0⌝ ) = ∞, ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0) ⊦ |
# ext !(⌜nf0⌝ ) = ∞, # al = ii(m), ef.take(n) = ext !(al), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), ef0.take(n) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦
Used terms: n
| # ext !(⌜nf0⌝ ) = ∞, # al = ii(m), ef.take(n) = ext !(al), ef.take(n) = cext !(caf.take(m)), ef.take(n) = cext !(⌜caf⌝ ).take(n), ef0.take(n) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ ef0.take(n), ef ≠ ef0, start(sf(0)), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1) ⊦ |
# al = ii(m), # ext !(⌜nf0⌝ ) = ∞, ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0) ⊦
| # al = ii(m), # ext !(⌜nf0⌝ ) = ∞, ef.take(n) = cext !(⌜caf⌝ ).take(n), ef.take(n) = cext !(caf.take(m)), ef.take(n) = ext !(al), ii(0) = 0, ∞ = # cext !(⌜caf⌝ ), ef.take(n) ≠ (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ef ≠ ef0, start(sf(0)), ∀ n1. ii(n1 + 1) = ii(n1) + # alf(n1) ∧ (⌜al⌝ + ⌜nf0⌝ ).f.drop(ii(n1)).take(# alf(n1)) = alf(n1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. ef.take(n0) = cext !(⌜caf⌝ ).take(n0), ∀ n0. ef0.take(n0) = (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n0) ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ nf.take(n).take(n) = nf.take(n); (s) ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ # nf.take(n) = n; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: n, ⌜ef.take(n)⌝ , ext !(⌜nf0⌝ )
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ ∀ n. cext !(⌜caf.take(n)⌝ ) = ext !(⌜α.take(ii(n))⌝ ) |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), cext !(caf.take(n1)) ≠ ext !(α.take(ii(n1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(⌜caf⌝ ) ≠ ext !(α), cext !(caf.take(n1)) ≠ ext !(α.take(ii(n1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n1)) ≠ ext !(α.take(ii(n1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n1)) ≠ ext !(α.take(ii(n1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 +1)) ≠ ext !(α.take(ii(n2 +1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ σ, α, ii, cext, caf, ext, start, sf, n0, slf, n, alf, step. ¬ ( # σ = # α + ⌜1⌝ ∧ ii(0) = 0 ∧ cext !(caf.take(n2)) ≠ ext !(α.take(ii(n2))) ∧ start(sf(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)) ∧ (∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ∧ (∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n))) ⊦
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ nf.take(0) = []; (s) ⊦ σ.take(0) = []; (s) ⊦ ext !([]) = []; (s)
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 +1)) ≠ ext !(α.take(ii(n2 +1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ σ, α, ii, cext, caf, ext, start, sf, n0, slf, n, alf, step. ¬ ( # σ = # α + ⌜1⌝ ∧ ii(0) = 0 ∧ cext !(caf.take(n2)) ≠ ext !(α.take(ii(n2))) ∧ start(sf(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)) ∧ (∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ∧ (∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n))) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ σ0, α0, ii0, cext0, caf0, ext0, start0, sf0, n1, slf0, n3, alf0, step0. # σ0 ≠ # α0 + ⌜1⌝ ∨ ii0(0) ≠ 0 ∨ cext0 !(caf0.take(n2)) = ext0 !(α0.take(ii0(n2))) ∨ ¬ start0(sf0(0)) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii0(n1)⌝ + ⌜1⌝ ∧ (∀ m. n1 ≤ m → slf0(m).tail = [] ∧ ii0(m) = ii0(n1));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii0(n3)⌝ ∧ (∀ m. n3 ≤ m → alf0(m) = [] ∧ ii0(m) = ii0(n3));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (∀ n0. frag*(IOAut(start0, step0, ext0))(slf0(n0), alf0(n0)) ∧ ext0 !(alf0(n0)) = cext0 !(caf0(n0) ') ∧ slf0(n0)[0] = sf0(n0) ∧ slf0(n0).last = sf0(n0 + 1)) ∨ ¬(∀ n. move(IOAut(start0, step0, ext0))(sf0(n), cext0 !(caf0(n) '), sf0(n + 1))) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # alf0(n) ∧ ¬ # α0 < ⌜ii0(n + 1)⌝ ∧ α0.drop(ii0(n)).take(# alf0(n)) = alf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # slf0(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ0 ∧ σ0.drop(ii0(n)).take(# slf0(n)) = slf0(n)) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ σ0, α0, ii0, cext0, caf0, ext0, start0, sf0, n1, slf0, n3, alf0, step0. # σ0 ≠ # α0 + ⌜1⌝ ∨ ii0(0) ≠ 0 ∨ cext0 !(caf0.take(n2)) = ext0 !(α0.take(ii0(n2))) ∨ ¬ start0(sf0(0)) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii0(n1)⌝ + ⌜1⌝ ∧ (∀ m. n1 ≤ m → slf0(m).tail = [] ∧ ii0(m) = ii0(n1));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii0(n3)⌝ ∧ (∀ m. n3 ≤ m → alf0(m) = [] ∧ ii0(m) = ii0(n3));∀ n. ∃ m. ii0(m) ≤ n ∧ n < ii0(m + 1)) ∨ ¬ (∀ n0. frag*(IOAut(start0, step0, ext0))(slf0(n0), alf0(n0)) ∧ ext0 !(alf0(n0)) = cext0 !(caf0(n0) ') ∧ slf0(n0)[0] = sf0(n0) ∧ slf0(n0).last = sf0(n0 + 1)) ∨ ¬(∀ n. move(IOAut(start0, step0, ext0))(sf0(n), cext0 !(caf0(n) '), sf0(n + 1))) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # alf0(n) ∧ ¬ # α0 < ⌜ii0(n + 1)⌝ ∧ α0.drop(ii0(n)).take(# alf0(n)) = alf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)) ∨ ¬(∀ n. ii0(n + 1) = ii0(n) + # slf0(n) - 1 ∧ ⌜ii0(n + 1)⌝ < # σ0 ∧ σ0.drop(ii0(n)).take(# slf0(n)) = slf0(n)) ⊦ |
# σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), # σ ≠ # α + ⌜1⌝ ∨ ii(0) ≠ 0 ∨ cext !(caf.take(n2)) = ext !(α.take(ii(n2))) ∨ ¬ start(sf(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)) ∨ ¬(∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ∨ ¬(∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n)) ⊦
Used terms: σ, α, ii, cext, caf, ext, start, sf, n0, slf, n, alf, step
| # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), # σ ≠ # α + ⌜1⌝ ∨ ii(0) ≠ 0 ∨ cext !(caf.take(n2)) = ext !(α.take(ii(n2))) ∨ ¬ start(sf(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)) ∨ ¬(∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ∨ ¬(∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n)) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(0) = 0, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used terms: n2
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: n2
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used terms: n2
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2 + 1)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, cext !(caf.take(n2) + caf(n2) ') ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: caf, n2
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # slf(n2) - 1, cext !(caf.take(n2) + caf(n2) ') ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s)
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # slf(n2) - 1, ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2 + 1))), ⌜ii(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2) + # alf(n2))), ⌜ii(n2) + # alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2) + # alf(n2)⌝ , (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2) + # alf(n2))), ⌜ii(n2) + # alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2) + # alf(n2)⌝ , (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2) + # alf(n2))), ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ , (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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| cext !(caf.take(n2)) = ext !(α.take(ii(n2))), ext !(alf(n2)) = cext !(caf(n2) '), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2) + # alf(n2))), ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ , (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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
⊦ ¬ # σ < ⌜n + n1⌝ → σ.take(n) + σ.drop(n).take(n1) = σ.take(n + n1)
ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2)) + α.drop(ii(n2)).take(# alf(n2))), ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2) + # alf(n2)⌝ , ¬ # α < ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ , (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: α, ii(n2), # alf(n2)
| ⊦ ¬ # σ < ⌜n + n1⌝ → σ.take(n) + σ.drop(n).take(n1) = σ.take(n + n1) |
| ext !(alf(n2)) = cext !(caf(n2) '), cext !(caf.take(n2)) = ext !(α.take(ii(n2))), # σ = # α + ⌜1⌝ , ii(n2) + # alf(n2) = ii(n2) + # slf(n2) - 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, cext !(caf.take(n2)) + ext !(alf(n2)) ≠ ext !(α.take(ii(n2)) + α.drop(ii(n2)).take(# alf(n2))), ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜ii(n2) + # alf(n2)⌝ , ¬ # α < ⌜ii(n2)⌝ + ⌜# alf(n2)⌝ , (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ ¬ # σ < ⌜m⌝ + ⌜n⌝ → σ.drop(m).take(n) = σ.take(m + n).drop(m)
Used simplifier rules: ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: α, ii(n2), # alf(n2)
| ⊦ ¬ # σ < ⌜m⌝ + ⌜n⌝ → σ.drop(m).take(n) = σ.take(m + n).drop(m) |
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. 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]))
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), # σ ≠ # α + ⌜1⌝ ∨ (∃ n. ¬(⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))) ⊦
Used terms: ext, α, start, σ, step
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), # σ ≠ # α + ⌜1⌝ ∨ (∃ n. ¬(⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, start(sf(0)), ¬ 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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, start(sf(0)), ¬ 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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # α = ⌜ii(n)⌝ , ii(0) = 0, ⌜n1⌝ < # α, finp(α), start(sf(0)), ¬ 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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, start(sf(0)), ¬ 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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # α = ⌜ii(n)⌝ , ii(0) = 0, ⌜n1⌝ < # α, finp(α), start(sf(0)), ¬ 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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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-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 ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), # σ = ⌜ii(n)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), finp(σ), start(sf(0)), ¬ step(σ[n1], al[n1], σ[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # σ = ⌜ii(n)⌝ + ⌜1⌝ , # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, n1 < ii(n), finp(σ), start(sf(0)), ¬ step(σ[n1], al[n1], σ[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(n), start(sf(0)), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(n), start(sf(0)), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used formulas: ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(0) = 0, ii(n0) = ii(n), n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, m ≤ n, ¬ ii(n) < ii(m + 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), ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: m
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, m ≤ n, ¬ ii(n) < ii(m + 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), ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ ii(n) < ii(m + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 terms: m
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ ii(n) < ii(m + 1), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 < m ↔ false); (s)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: m
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n. n < # alf(m) → IOAut(start, step, ext).step(slf(m)[n], alf(m)[n], slf(m)[n +1]) ⊦
Used terms: IOAut(start, step, ext), slf(m), alf(m)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m)) = alf(m), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n. n < # alf(m) → IOAut(start, step, ext).step(slf(m)[n], alf(m)[n], slf(m)[n +1]) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al.drop(ii(m)).take(# alf(m)) = # alf(m), # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n. n < # al.drop(ii(m)).take(# alf(m)) → al.drop(ii(m)).take(# alf(m))[n] = alf(m)[n] ⊦
Used terms: al.drop(ii(m)).take(# alf(m)), alf(m)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al.drop(ii(m)).take(# alf(m)) = # alf(m), # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n. n < # al.drop(ii(m)).take(# alf(m)) → al.drop(ii(m)).take(# alf(m))[n] = alf(m)[n] ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦
Used simplifier rules: ⊦ # x.take(n) = n; (s)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), n1 - ii(m) < # alf(m) → al.drop(ii(m)).take(# alf(m))[n1 - ii(m)] = alf(m)[n1 - ii(m)], ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 terms: n1 - ii(m)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), n1 - ii(m) < # alf(m) → al.drop(ii(m)).take(# alf(m))[n1 - ii(m)] = alf(m)[n1 - ii(m)], ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n1 - ii(m)] = alf(m)[n1 - ii(m)], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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: 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)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n1 - ii(m)] = alf(m)[n1 - ii(m)], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), n1 < ii(n), ii(m) < ii(m + 1), ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m) ≤ n1, ii(m + 1) ≤ ii(n), ¬ step(sl[n1], al[n1], sl[n1 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), n1 = n3 + ii(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n1, ii(m), n3
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), n1 = n3 + ii(m), alf(m) ≠ [], ii(m) < ii(n), ii(m) < ii(m + 1), n1 < ii(n), n1 < ii(m + 1), start(sf(0)), ii(m + 1) ≤ ii(n), ii(m) ≤ n1, m ≤ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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: 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) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (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 ≤ m + n; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # sl.drop(ii(m)).take(# slf(m)) = # slf(m), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n. n < # sl.drop(ii(m)).take(# slf(m)) → sl.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦
Used terms: sl.drop(ii(m)).take(# slf(m)), slf(m)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # sl.drop(ii(m)).take(# slf(m)) = # slf(m), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n. n < # sl.drop(ii(m)).take(# slf(m)) → sl.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦
Used simplifier rules: ⊦ # x.take(n) = n; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), n3 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦
Used terms: n3
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), n3 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), n3 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n < m ↔ false); (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 ⊦ ¬ 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 formulas: n3 < # slf(m)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), n3 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).head = sf(m), slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦
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 → ¬ n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ # x = 0 ↔ x = []; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(n) + 1 = # sl, slf(m).head = sf(m), slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = m0 + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = m0, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) + # slf(m) ≠ 0, alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦
Used simplifier rules: ⊦ 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(m) + # slf(m), m0
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = m0 + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(m + 1) = m0, ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) + # slf(m) ≠ 0, alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[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 + 1 ≠ 0; (s)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), s = sf(m), slf(m) = s + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: slf(m), s, sl0
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), s = sf(m), slf(m) = s + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], slf(m)[n2 + 1]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), sf(m) ∈ slf(m), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) ⊦ a + x = a ' + x; (s)
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), sl.drop(ii(m)).take(# slf(m))[n3] = slf(m)[n3], al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), sf(m) ∈ slf(m), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1], ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]) ⊦ |
¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ # sl.drop(ii(m)) < # slf(m), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦
Used simplifier rules: ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) 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 ⊦ m < n → n ≠ 0; (s) ⊦ m +1 = m + 1; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) f: ⊦ m < n → n ≠ 0; (forward) 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 ⊦ m + 1 ≠ 0; (s) ⊦ m ≤ m0 ∧ n ≤ n0 → ¬ m0 + n0 < m + n; (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(m)), # slf(m), n3
| ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m] |
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al.drop(ii(m)).take(# alf(m))[n3] = alf(m)[n3], sl.drop(ii(m))[n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), start(sf(0)), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ # sl.drop(ii(m)) < # slf(m), ¬ step(sl[n3 + ii(m)], al[n3 + ii(m)], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ n2. n2 < # alf(m) → al.drop(ii(m)).take(# alf(m))[n2] = alf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), ∀ n1. n1 < # slf(m) → sl.drop(ii(m)).take(# slf(m))[n1] = slf(m)[n1] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al[ii(m) + n3] = alf(m)[n3], sl[ii(m) + n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), ii(m) < # sl, ii(m + 1) < # sl, start(sf(0)), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2], ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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: 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 ¬ # x < n, m < n ⊦ x.take(n)[m] = x[m]; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < n → m ≤ n; (s) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ # x = 0 ↔ x = []; (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 ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ ¬ m + n < m; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m + m0 < n → ¬ n + n0 < m; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al[ii(m) + n3] = alf(m)[n3], sl[ii(m) + n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), ii(m) < # sl, ii(m + 1) < # sl, start(sf(0)), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2], ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦ |
cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), sl[ii(m) + n3] = slf(m)[n3], al[ii(m) + n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], ii(m + 1) < # sl, ii(m) < # sl, n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), sf(m) ∈ slf(m), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), n3 < # alf(m) → step(slf(m)[n3], alf(m)[n3], sl0[n3]), ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2] ⊦
Used terms: n3
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , ext !(alf(m)) = cext !(caf(m) '), # al = ii(n), # slf(m) = # alf(m) + 1, ii(n) + 1 = # sl, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), sl[ii(m) + n3] = slf(m)[n3], al[ii(m) + n3] = alf(m)[n3], ii(n0) = ii(n), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], ii(m + 1) < # sl, ii(m) < # sl, n3 < # slf(m), n3 + ii(m) < ii(n), ii(m) < ii(n), ii(m) < ii(m + 1), n3 < # alf(m), start(sf(0)), sf(m) ∈ slf(m), ii(m + 1) ≤ ii(n), m ≤ n, ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), n3 < # alf(m) → step(slf(m)[n3], alf(m)[n3], sl0[n3]), ∀ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al[ii(m) + n3] = alf(m)[n3], sl[ii(m) + n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), ii(m) < # sl, ii(m + 1) < # sl, start(sf(0)), step(slf(m)[n3], alf(m)[n3], sl0[n3]), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2], ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ⊦
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # slf(m) = # alf(m) + 1, # al = ii(n), ii(m) + # slf(m) = ii(m + 1) + 1, ii(n) + 1 = # sl, slf(m).last = sf(m + 1), al[ii(m) + n3] = alf(m)[n3], sl[ii(m) + n3] = slf(m)[n3], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(n0) = ii(n), slf(m) = sf(m) ' + sl0, alf(m) ≠ [], sl ≠ [], slf(m) ≠ [], n3 < # alf(m), ii(m) < ii(m + 1), ii(m) < ii(n), n3 + ii(m) < ii(n), n3 < # slf(m), ii(m) < # sl, ii(m + 1) < # sl, start(sf(0)), step(slf(m)[n3], alf(m)[n3], sl0[n3]), sf(m) ∈ slf(m), m ≤ n, ii(m + 1) ≤ ii(n), ¬ step(slf(m)[n3], alf(m)[n3], sl[(n3 + ii(m)) + 1]), ∀ n2. n2 < # alf(m) → al.drop(ii(m))[n2] = alf(m)[n2], ∀ n1. n1 < # slf(m) → sl[ii(m) + n1] = slf(m)[n1], ∀ n2. n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], sl0[n2]), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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: ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n3 + 1
| cext !(⌜caf⌝ ) = ⌜ext !(al)⌝ , # al = ii(n), ii(n) + 1 = # sl, ii(n0) = ii(n), ii(0) = 0, n1 < ii(n), start(sf(0)), ¬ 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
| ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used simplifier rules: <; (wellfounded) Used terms: n
| ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), n - 1 ≤ n ∧ ii(n - 1) ≤ n1 ∧ n1 < ii((n - 1) + 1)
Used terms: n - 1
| ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), n - 1 ≤ n ∧ ii(n - 1) ≤ n1 ∧ n1 < ii((n - 1) + 1) |
ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ii(n - 1) ≤ n1 ∧ n1 < ii((n - 1) + 1)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m ≤ m + n; (s) n0 ≤ n ⊦ n - n0 ≤ m ↔ n ≤ m + n0; (s) ⊦ m < n → n ≠ 0; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| ii(0) = 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ii(n - 1) ≤ n1 ∧ n1 < ii((n - 1) + 1) |
ii(0) = 0, n = m0 + 1, n ≠ 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ii(m0) ≤ n1 ∧ n1 < ii(m0 + 1)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, m0
| ii(0) = 0, n = m0 + 1, n ≠ 0, n1 < ii(n), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < n → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ n ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ii(m0) ≤ n1 ∧ n1 < ii(m0 + 1) |
ii(0) = 0, n1 < ii(m0), n1 < ii(m0 + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| ii(0) = 0, n1 < ii(m0), n1 < ii(m0 + 1), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, n1 < ii(m0 + 1), n1 < ii(m0), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. m ≤ m0 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1)
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: m0, ii, n1
| ii(0) = 0, n1 < ii(m0 + 1), n1 < ii(m0), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. m ≤ m0 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
ii(0) = 0, ii(m) < ii(m0 + 1), ii(m) < ii(m0), ii(m) < ii(m + 1), n1 < ii(m0 + 1), n1 < ii(m0), n1 < ii(m + 1), ii(m) ≤ n1, m ≤ m0, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ 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(m0 + 1), ii(m) < ii(m0), ii(m) < ii(m + 1), n1 < ii(m0 + 1), n1 < ii(m0), n1 < ii(m + 1), ii(m) ≤ n1, m ≤ m0, ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n1, ii, n2. n1 < m0 + 1 → ii(0) = 0 ∧ n2 < ii(n1) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) → (∃ m. m ≤ n1 ∧ ii(m) ≤ n2 ∧ n2 < ii(m + 1)) ⊦ ∃ m. m ≤ m0 + 1 ∧ ii(m) ≤ n1 ∧ n1 < ii(m + 1) |
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ 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: m
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, ⌜n1⌝ < # α, start(sf(0)), ¬ 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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, start(sf(0)), ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.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)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, start(sf(0)), ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, start(sf(0)), ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦
Used terms: n1
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, start(sf(0)), ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, n1 < ii(m + 1), ii(m) < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: m
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, n1 < ii(m + 1), ii(m) < ii(m + 1), frag*(IOAut(start, step, ext))(slf(m), alf(m)), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → IOAut(start, step, ext).step(slf(m)[n], alf(m)[n], slf(m)[n +1]) ⊦
Used terms: IOAut(start, step, ext), slf(m), alf(m)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → IOAut(start, step, ext).step(slf(m)[n], alf(m)[n], slf(m)[n +1]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(0) = 0, n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]) ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used terms: m
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), sf0.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.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: m
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), sf0.drop(ii(m)).take(# slf(m)) = slf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(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])
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # sf0.drop(ii(m)).take(# slf(m)) = # slf(m), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # sf0.drop(ii(m)).take(# slf(m)) → sf0.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦
Used terms: sf0.drop(ii(m)).take(# slf(m)), slf(m)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # sf0.drop(ii(m)).take(# slf(m)) = # slf(m), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # sf0.drop(ii(m)).take(# slf(m)) → sf0.drop(ii(m)).take(# slf(m))[n] = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(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)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 - ii(m) < # slf(m) → sf0((n1 - ii(m)) + ii(m)) = slf(m)[n1 - ii(m)], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used terms: n1 - ii(m)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 - ii(m) < # slf(m) → sf0((n1 - ii(m)) + ii(m)) = slf(m)[n1 - ii(m)], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 < # slf(m) + ii(m) → sf0((n1 - ii(m)) + ii(m)) = slf(m)[n1 - ii(m)], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦
Used simplifier rules: n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], ii(m) < ii(m + 1), n1 < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 < # slf(m) + ii(m) → sf0((n1 - ii(m)) + ii(m)) = slf(m)[n1 - ii(m)], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, n1 = n2 + ii(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 < # slf(m) + ii(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n1, ii(m), n2
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, n1 = n2 + ii(m), alf(m) ≠ [], n1 < ii(m + 1), ii(m) < ii(m + 1), start(sf(0)), ii(m) ≤ n1, ¬ step(sf0(n1), af(n1), sf0(n1 + 1)), n1 < # slf(m) + ii(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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 ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ m + n; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), af.drop(ii(m)).take(# alf(m)) = alf(m), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # af.drop(ii(m)).take(# alf(m)) = # alf(m), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), 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), n2 < # alf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[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]) |
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # af.drop(ii(m)).take(# alf(m)) = # alf(m), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), 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), n2 < # alf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # af.drop(ii(m)).take(# alf(m)) → af.drop(ii(m)).take(# alf(m))[n] = alf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), 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), n2 < # alf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], n2 < # alf(m) → af(n2 + ii(m)) = alf(m)[n2], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used terms: n2
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), 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), n2 < # alf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), af(n2 + ii(m)), sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], n2 < # alf(m) → af(n2 + ii(m)) = alf(m)[n2], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # slf(m) - 1, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), alf(m) ≠ [], n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(sf0(n2 + ii(m)), alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), af(n2 + ii(m)) = alf(m)[n2], 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), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n < m ↔ false); (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 ⊦ ¬ 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 formulas: n2 < # slf(m)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).last = sf(m + 1), slf(m)[0] = sf(m), af(n2 + ii(m)) = alf(m)[n2], 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), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(sf0(n2 + ii(m)), alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # slf(m) → sf0(n2 + ii(m)) = slf(m)[n2], ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, sf0(n2 + ii(m)) = slf(m)[n2], alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[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 → ¬ n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ # x = 0 ↔ x = []; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, ii(m + 1) = ii(m) + # slf(m) - 1, sf0(n2 + ii(m)) = slf(m)[n2], alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = m0 + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = m0, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], ii(m) + # slf(m) ≠ 0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦
Used simplifier rules: ⊦ 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(m) + # slf(m), m0
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = m0 + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = m0, ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], ii(m) + # slf(m) ≠ 0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[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 ≠ 0; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).head = sf(m), slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, s = sf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = s + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: slf(m), s, x0
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, s = sf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = s + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], slf(m)[n + 1]), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) ⊦ a + x = a ' + x; (s)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], x0[n2]), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used terms: n2
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 < # alf(m) → step(slf(m)[n2], alf(m)[n2], x0[n2]), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
Used terms: n2 + 1
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), n2 + 1 < # alf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ n2 + 1 < # alf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used formulas: n2 + 1 < # alf(m)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), n2 + 1 < # alf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 + 1 < # alf(m), ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ii(m + 1) = ii(m) + # alf(m), ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 + 1 < # alf(m), ii(m) < ii(m + 1), n2 < # alf(m), n2 < # slf(m), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n] ⊦ |
Used simplifier rules: ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n2 + 1
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m) = # alf(m) + 1, ii(m) + # slf(m) = ii(m + 1) + 1, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + # alf(m), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], n2 < # slf(m), n2 < # alf(m), ii(m) < ii(m + 1), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ n2 + 1 < # alf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), n2 + 1 < # alf(m) → af((n2 + 1) + ii(m)) = alf(m)[n2 + 1], ∀ n. n < # slf(m) → sf0(n + ii(m)) = slf(m)[n], ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < # alf(m) → af(n + ii(m)) = alf(m)[n], ∀ n. n < # alf(m) → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < m + n ↔ n ≠ 0; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ¬ m + n < m; (s) ⊦ m < n → (n ≤ m + 1 ↔ n = m + 1); (s) ⊦ m + 1 ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss)
| ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf((m + 1) + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: m + 1
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf((m + 1) + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m + 1)).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii((m + 1) + 1) = ii(m + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: m + 1
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m + 1)).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii((m + 1) + 1) = ii(m + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ sf0.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), sf0.drop(ii(m + 1)).take(# slf(m + 1)) = slf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii((m + 1) + 1) = ii(m + 1) + # slf(m + 1) - 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used terms: m + 1
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), sf0.drop(ii(m + 1)).take(# slf(m + 1)) = slf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii((m + 1) + 1) = ii(m + 1) + # slf(m + 1) - 1, sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m + 1) = 1 + # alf(m + 1), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) = slf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ n + 0 = n; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s)
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m + 1) = 1 + # alf(m + 1), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) = slf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) = # slf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, # slf(m + 1) = 1 + # alf(m + 1), slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. n < # sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) → sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1))[n] = slf(m + 1)[n] ⊦
Used terms: sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)), slf(m + 1)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) = # slf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, # slf(m + 1) = 1 + # alf(m + 1), slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. n < # sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1)) → sf0.drop(ii(m) + n2 + 1).take(# slf(m + 1))[n] = slf(m + 1)[n] ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m + 1) = 1 + # alf(m + 1), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[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)
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # slf(m + 1) = 1 + # alf(m + 1), # alf(m) = n2 + 1, # slf(m) = 2 + n2, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], frag*(IOAut(start, step, ext))(slf(m + 1), alf(m + 1)), start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n] ⊦ |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, # slf(m + 1) = 1 + # alf(m + 1), slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. n < # alf(m + 1) → IOAut(start, step, ext).step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n +1]) ⊦
Used terms: IOAut(start, step, ext), slf(m + 1), alf(m + 1)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, # slf(m + 1) = 1 + # alf(m + 1), slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. n < # alf(m + 1) → IOAut(start, step, ext).step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n +1]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), 0 < # alf(m + 1) → step(slf(m + 1)[0], alf(m + 1)[0], slf(m + 1)[0 + 1]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦
Used terms: 0
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), 0 < # alf(m + 1) → step(slf(m + 1)[0], alf(m + 1)[0], slf(m + 1)[0 + 1]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), 0 < # slf(m + 1) → sf0(0 + ii(m) + n2 + 1) = slf(m + 1)[0], ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦
Used terms: 0
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), 0 < # slf(m + 1) → sf0(0 + ii(m) + n2 + 1) = slf(m + 1)[0], ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), slf(m + 1) ≠ [] → sf0(1 + ii(m) + n2) = slf(m + 1).head, ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # slf(m + 1) = # alf(m + 1) + 1, # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, ii(2 + m) = ii(m) + n2 + # slf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), slf(m + 1) ≠ [] → sf0(1 + ii(m) + n2) = slf(m + 1).head, ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, slf(m + 1) = s + x1, alf(m) ≠ [], slf(m + 1) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), slf(m + 1) ≠ [] → sf0(1 + ii(m) + n2) = s, alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦
Used simplifier rules: eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: slf(m + 1), s, x1
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # slf(m + 1) = # alf(m + 1) + 1, slf(m).last = sf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# alf(m + 1)) = alf(m + 1), slf(m + 1)[0] = sf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = ii(m) + n2 + # slf(m + 1), ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # alf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = sf(m) ' + x0, slf(m + 1) = s + x1, alf(m) ≠ [], slf(m + 1) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf0((n2 + ii(m)) + 1)), slf(m + 1) ≠ [] → sf0(1 + ii(m) + n2) = s, alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, slf(m + 1)[1]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # slf(m + 1) → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # alf(m + 1) → step(slf(m + 1)[n], alf(m + 1)[n], slf(m + 1)[n + 1]) ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list 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) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) n ≠ 0 ⊦ (a ' + x)[(* n)] = x[n -1]; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ (a ' + x).head = a; (s) eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ a + x = a ' + x; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), slf(m).last = sf(m + 1), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # x1 = # alf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # x1, s = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], sf0(1 + ii(m) + n2) = sf(m + 1), slf(m) = sf(m) ' + x0, slf(m + 1) = sf(m + 1) ' + x1, slf(m) = x2 + s ', alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m + 1), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n] ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: slf(m), s, x2
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # x1 = # alf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # x1, s = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], sf0(1 + ii(m) + n2) = sf(m + 1), slf(m) = sf(m) ' + x0, slf(m + 1) = sf(m + 1) ' + x1, slf(m) = x2 + s ', alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m + 1), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = x2 + sf(m + 1) ', slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = x2 + sf(m + 1) ', slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # x1 = # alf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # x1, sf0(n2 + ii(m)) = slf(m)[n2], sf0(1 + ii(m) + n2) = sf(m + 1), slf(m) = sf(m) ' + x0, slf(m + 1) = sf(m + 1) ' + x1, slf(m) = x2 + sf(m + 1) ', alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m + 1), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ¬ n2 < n2 → step(slf(m)[n2], alf(m)[n2], x0[n2]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n] ⊦
Used terms: n2
| ext !(alf(m + 1)) = cext !(caf(m + 1) '), ext !(alf(m)) = cext !(caf(m) '), cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), # alf(m) = n2 + 1, # slf(m) = 2 + n2, # x1 = # alf(m + 1), slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(0) = 0, ii(m + 1) = ii(m) + n2 + 1, ii(2 + m) = (ii(m) + n2 + 1) + # x1, sf0(n2 + ii(m)) = slf(m)[n2], sf0(1 + ii(m) + n2) = sf(m + 1), slf(m) = sf(m) ' + x0, slf(m + 1) = sf(m + 1) ' + x1, slf(m) = x2 + sf(m + 1) ', alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m + 1), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ¬ n2 < n2 → step(slf(m)[n2], alf(m)[n2], x0[n2]), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n] ⊦ |
cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = x2 + sf(m + 1) ', slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦
Used simplifier rules: ⊦ ¬ n < n; (s)
| cext !(⌜caf⌝ ) = ext !(⌜af⌝ ), ext !(alf(m)) = cext !(caf(m) '), ext !(alf(m + 1)) = cext !(caf(m + 1) '), # x1 = # alf(m + 1), # slf(m) = 2 + n2, # alf(m) = n2 + 1, slf(m + 1).last = sf(2 + m), af.drop(ii(m) + n2 + 1).take(# x1) = alf(m + 1), af(n2 + ii(m)) = alf(m)[n2], ii(2 + m) = (ii(m) + n2 + 1) + # x1, ii(m + 1) = ii(m) + n2 + 1, ii(0) = 0, sf0(1 + ii(m) + n2) = sf(m + 1), sf0(n2 + ii(m)) = slf(m)[n2], slf(m) = x2 + sf(m + 1) ', slf(m + 1) = sf(m + 1) ' + x1, slf(m) = sf(m) ' + x0, alf(m) ≠ [], slf(m) ≠ [], start(sf(0)), step(slf(m)[n2], alf(m)[n2], x0[n2]), sf(m + 1) ∈ slf(m + 1), sf(m) ∈ slf(m), sf(m + 1) ∈ slf(m), ¬ step(slf(m)[n2], alf(m)[n2], sf(m + 1)), alf(m + 1) ≠ [] → step(sf(m + 1), alf(m + 1).head, x1[0]), ∀ n. ¬ # x1 < n → sf0(n + ii(m) + n2 + 1) = slf(m + 1)[n], ∀ n. n < # x1 → step(slf(m + 1)[n], alf(m + 1)[n], x1[n]), ∀ n. ¬ n2 < n → step(slf(m)[n], alf(m)[n], x0[n]), ∀ n. ¬ n2 < n → af(n + ii(m)) = alf(m)[n], ∀ n. n < 2 + n2 → sf0(n + ii(m)) = slf(m)[n], ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1) ⊦ |
Used simplifier rules: ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ x = a ' + x0 → x[m + 1] = x0[m]; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n2 + 1
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , ii(0) = 0, start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , σ.drop(ii(0)).take(# slf(0)) = slf(0), ii(0) = 0, ii(0 + 1) = ii(0) + # slf(0) - 1, ⌜ii(0 + 1)⌝ < # σ, start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used terms: 0
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , σ.drop(ii(0)).take(# slf(0)) = slf(0), ii(0) = 0, ii(0 + 1) = ii(0) + # slf(0) - 1, ⌜ii(0 + 1)⌝ < # σ, start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , σ.take(# slf(0)) = slf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ σ.drop(0) = σ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s)
| cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , σ.take(# slf(0)) = slf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ = # α + ⌜1⌝ , slf(0).last = sf(0 + 1), σ.take(# slf(0)) = slf(0), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: 0
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ = # α + ⌜1⌝ , slf(0).last = sf(0 + 1), σ.take(# slf(0)) = slf(0), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), σ.take(# slf(0)) = slf(0), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), σ.take(# slf(0)) = slf(0), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # σ.take(# slf(0)) → σ.take(# slf(0))[n] = slf(0)[n] ⊦
Used terms: σ.take(# slf(0)), slf(0)
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n. n < # σ.take(# slf(0)) → σ.take(# slf(0))[n] = slf(0)[n] ⊦ |
ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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. n < # slf(0) → σ.take(# slf(0))[n] = slf(0)[n], ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
| ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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. n < # slf(0) → σ.take(# slf(0))[n] = slf(0)[n], ∀ 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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[0]), 0 < # slf(0) → σ.take(# slf(0))[0] = slf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used terms: 0
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[0]), 0 < # slf(0) → σ.take(# slf(0))[0] = slf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[0]), slf(0) ≠ [] → σ.take(# slf(0))[0] = slf(0).head, (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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[0]), slf(0) ≠ [] → σ.take(# slf(0))[0] = slf(0).head, (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. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), σ.take(# slf(0))[0] = slf(0).head, ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦
Used simplifier rules: not-finfrag-empty: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); ⊦ ¬ n∞ < ⌜0⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # [] = 0; (s)
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), σ.take(# slf(0))[0] = slf(0).head, ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]
ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = slf(0).head, slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ 0 < # slf(0) ∧ ¬ # σ < ⌜# slf(0)⌝
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ x ≠ [] → x[0] = x.head; (s) Used terms: σ, # slf(0), 0
| m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m] |
| ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = slf(0).head, slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ 0 < # slf(0) ∧ ¬ # σ < ⌜# slf(0)⌝ |
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), σ.take(# slf(0))[0] = slf(0).head, ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ slf(0) ≠ [] ∧ ¬ # σ < ⌜# slf(0)⌝
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).last = sf(1), slf(0)[0] = sf(0), σ.take(# slf(0))[0] = slf(0).head, ii(1) = # slf(0) - 1, ii(0) = 0, ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ slf(0) ≠ [] ∧ ¬ # σ < ⌜# slf(0)⌝ |
ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = slf(0).head, slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, # σ < ⌜# slf(0)⌝ , ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: not-finfrag-empty: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); ⊦ ¬ n∞ < ⌜0⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ σ.take(0) = []; (s) ⊦ # [] = 0; (s)
| ext !(alf(0)) = cext !(caf(0) '), cext !(⌜caf⌝ ) = ext !(α), # σ = # α + ⌜1⌝ , # σ.take(# slf(0)) = # slf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = slf(0).head, slf(0)[0] = sf(0), ii(0) = 0, ii(1) = # slf(0) - 1, # σ < ⌜# slf(0)⌝ , ⌜ii(1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).head = sf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, slf(0) ≠ [], ii(1) < # slf(0), ⌜ii(1)⌝ < # σ, # σ < ⌜# slf(0)⌝ , frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.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 ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ x ≠ [] → x[0] = x.head; (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 f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ls-trans: ⊦ n∞ < n∞1 ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf
| cext !(⌜caf⌝ ) = ext !(α), ext !(alf(0)) = cext !(caf(0) '), # σ.take(# slf(0)) = # slf(0), # σ = # α + ⌜1⌝ , slf(0).head = sf(0), slf(0).last = sf(1), σ.take(# slf(0))[0] = sf(0), ii(1) = # slf(0) - 1, ii(0) = 0, slf(0) ≠ [], ii(1) < # slf(0), ⌜ii(1)⌝ < # σ, # σ < ⌜# slf(0)⌝ , frag*(IOAut(start, step, ext))(slf(0), alf(0)), start(sf(0)), ¬ start(σ[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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n) ⊦ |
Used simplifier rules: ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m + 1 ≠ 0; (s) m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # x = 0 ↔ x = []; (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 ls-trans: ⊦ n∞ < n∞1 ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ ¬ n∞ < ⌜0⌝ ; (s) n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: # slf(0), m0
| ii(0) = 0, # σ ≠ # α + ⌜1⌝ , start(sf(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), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
# α = ⌜ii(n)⌝ , ii(0) = 0, # σ ≠ # α + ⌜1⌝ , finp(α), start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
ii(0) = 0, # σ ≠ # α + ⌜1⌝ , start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. 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), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦
| # α = ⌜ii(n)⌝ , ii(0) = 0, # σ ≠ # α + ⌜1⌝ , finp(α), start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ σ.drop(ii(n)).take(# slf(n)) = slf(n), ∀ m. n ≤ m → alf(m) = [] ∧ ii(m) = ii(n), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
# al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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. 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦
Used simplifier rules: frag-finite-al: ⊦ frag(ioa)(σ, ⌜al⌝ ) ↔ frag*(ioa)(σ.l, al) ∧ finp(σ); ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜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⌝ , start(sf(0)), (finp(σ) ⊃ # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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. 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦ |
# al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , finp(σ), start(sf(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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦
# al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , start(sf(0)), ¬ 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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦
| # al = ii(n), # σ = ⌜ii(n0)⌝ + ⌜1⌝ , ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , finp(σ), start(sf(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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ finp(⌜x⌝ ); (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ ⌜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, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, start(sf(0)), n0 ≤ n → slf(n).tail = [] ∧ ii(n) = 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦
Used terms: n
| # al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, start(sf(0)), n0 ≤ n → slf(n).tail = [] ∧ ii(n) = 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), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, start(sf(0)), ¬ n0 ≤ n, ∀ 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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦
| # al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, start(sf(0)), ¬ n0 ≤ n, ∀ 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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦ |
# al = ii(n), ii(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n < n0, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦
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(n0) + 1 = # sl, ii(0) = 0, ii(n) + 1 ≠ # sl, n < n0, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n1. ii(n1 + 1) = ii(n1) + # slf(n1) - 1 ∧ ¬ ii(n0) < ii(n1 + 1) ∧ sl.drop(ii(n1)).take(# slf(n1)) = slf(n1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(sl, al) ∨ ¬ start(sl[0]) ⊦ |
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: n0
| # al = ii(n), ii(0) = 0, # σ ≠ ⌜ii(n)⌝ + ⌜1⌝ , start(sf(0)), ¬ 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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), cext !(⌜caf⌝ ) ≠ ⌜ext !(al)⌝ ∨ ¬ frag*(IOAut(start, step, ext))(σ.l, al) ∨ ¬ finp(σ) ∨ ¬ start(σ[0]) ⊦ |
# al = ii(n), ii(0) = 0, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0) ⊦
Used simplifier rules: ⊦ ¬ finp(⌜nf⌝ ); (s) ⊦ ⌜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, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0) ⊦ |
# al = ii(n), ii(0) = 0, start(sf(0)), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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) ≤ # al ∧ # al < ii(m + 1) ⊦
Used terms: # al
| # al = ii(n), ii(0) = 0, start(sf(0)), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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) ≤ # al ∧ # al < ii(m + 1) ⊦ |
# al = ii(n), ii(0) = 0, ii(m) < ii(m + 1), ii(n) < ii(m + 1), start(sf(0)), ii(m) ≤ ii(n), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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), start(sf(0)), ii(m) ≤ ii(n), ∀ n0. ii(n0 + 1) = ii(n0) + # slf(n0) - 1 ∧ sf0.drop(ii(n0)).take(# slf(n0)) = slf(n0), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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⌝ , start(sf(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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 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. 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), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
ii(0) = 0, # σ ≠ ∞, start(sf(0)), finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ) ∨ ¬ fragω(IOAut(start, step, ext))(σ.f, af) ∨ finp(σ) ∨ ¬ start(σ[0]) ⊦
Used simplifier rules: frag-inf-al: ⊦ frag(ioa)(σ, ⌜af⌝ ) ↔ fragω(ioa)(σ.f, af) ∧ ¬ finp(σ); ⊦ ⌜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, # σ ≠ ∞, start(sf(0)), finp(σ) → # σ = ⌜ii(n0)⌝ + ⌜1⌝ ∧ (∀ m. n0 ≤ m → slf(m).tail = [] ∧ ii(m) = ii(n0)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ af.drop(ii(n)).take(# alf(n)) = alf(n), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ) ∨ ¬ fragω(IOAut(start, step, ext))(σ.f, af) ∨ finp(σ) ∨ ¬ start(σ[0]) ⊦ |
ii(0) = 0, σ = ⌜sl⌝ , # σ ≠ ∞, start(sf(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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ) ∨ ¬ fragω(IOAut(start, step, ext))(σ.f, af) ∨ finp(σ) ∨ ¬ start(σ[0]) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜nf⌝ = ∞; (s)
| ii(0) = 0, σ = ⌜sl⌝ , # σ ≠ ∞, start(sf(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. 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(⌜af⌝ ) ∨ ¬ fragω(IOAut(start, step, ext))(σ.f, af) ∨ finp(σ) ∨ ¬ start(σ[0]) ⊦ |
ii(n0) + 1 = # sl, ii(0) = 0, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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, start(sf(0)), ∀ n. ii(n + 1) = ii(n) + # slf(n) - 1 ∧ ii(n + 1) < # sl ∧ sl.drop(ii(n)).take(# slf(n)) = slf(n), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ 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, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ≤ # sl ∧ # sl < ii(m + 1) ⊦
Used terms: # sl
| ii(n0) + 1 = # sl, ii(0) = 0, start(sf(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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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) ≤ # sl ∧ # sl < ii(m + 1) ⊦ |
ii(n0) + 1 = # sl, ii(0) = 0, ii(m) < ii(m + 1), # sl < ii(m + 1), start(sf(0)), ii(m) ≤ # sl, ∀ 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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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 lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ii(n0) + 1 = # sl, ii(0) = 0, ii(m) < ii(m + 1), # sl < ii(m + 1), start(sf(0)), ii(m) ≤ # sl, ∀ 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), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ 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; (s) Used terms: m
| ii(0) = 0, ii0(0) = 0, ii0 ≠ ii, start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), cext !(⌜caf⌝ ) ≠ ext !(α) ∨ ¬ frag(IOAut(start, step, ext))(σ, α) ∨ ¬ start(σ[0]) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0 ≠ ii, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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 ≠ ii, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
| ii(0) = 0, ii0(0) = 0, ii0(n1) ≠ ii(n1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 +1) ≠ ii(n2 +1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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, ii0, start, sf, α, n, alf, σ, n0, slf, step, ext, cext, caf. ¬ ( ii(0) = 0 ∧ ii0(0) = 0 ∧ ii0(n2) ≠ ii(n2) ∧ start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1))) ∧ (∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1))) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| ii(0) = 0, ii0(0) = 0, ii0(n2 +1) ≠ ii(n2 +1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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, ii0, start, sf, α, n, alf, σ, n0, slf, step, ext, cext, caf. ¬ ( ii(0) = 0 ∧ ii0(0) = 0 ∧ ii0(n2) ≠ ii(n2) ∧ start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1))) ∧ (∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1))) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ ii1, ii2, start0, sf0, α0, n1, alf0, σ0, n3, slf0, step0, ext0, cext0, caf0. ii1(0) ≠ 0 ∨ ii2(0) ≠ 0 ∨ ii2(n2) = ii1(n2) ∨ ¬ start0(sf0(0)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii1(n1)⌝ ∧ (∀ m. n1 ≤ m → alf0(m) = [] ∧ ii1(m) = ii1(n1));∀ n. ∃ m. ii1(m) ≤ n ∧ n < ii1(m + 1)) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii2(n3)⌝ + ⌜1⌝ ∧ (∀ m. n3 ≤ m → slf0(m).tail = [] ∧ ii2(m) = ii2(n3));∀ n. ∃ m. ii2(m) ≤ n ∧ n < ii2(m + 1)) ∨ ¬(∀ n. ii2(n + 1) = ii2(n) + # slf0(n) - 1 ∧ ⌜ii2(n + 1)⌝ < # σ0 ∧ σ0.drop(ii2(n)).take(# slf0(n)) = slf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii2(m) ≤ ii2(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 → ii1(m) ≤ ii1(n)) ∨ ¬(∀ n. move(IOAut(start0, step0, ext0))(sf0(n), cext0 !(caf0(n) '), sf0(n + 1))) ∨ ¬ (∀ n0. frag*(IOAut(start0, step0, ext0))(slf0(n0), alf0(n0)) ∧ ext0 !(alf0(n0)) = cext0 !(caf0(n0) ') ∧ slf0(n0)[0] = sf0(n0) ∧ slf0(n0).last = sf0(n0 + 1)) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ ii1, ii2, start0, sf0, α0, n1, alf0, σ0, n3, slf0, step0, ext0, cext0, caf0. ii1(0) ≠ 0 ∨ ii2(0) ≠ 0 ∨ ii2(n2) = ii1(n2) ∨ ¬ start0(sf0(0)) ∨ ¬ (finp(α0) ⊃ # α0 = ⌜ii1(n1)⌝ ∧ (∀ m. n1 ≤ m → alf0(m) = [] ∧ ii1(m) = ii1(n1));∀ n. ∃ m. ii1(m) ≤ n ∧ n < ii1(m + 1)) ∨ ¬ (finp(σ0) ⊃ # σ0 = ⌜ii2(n3)⌝ + ⌜1⌝ ∧ (∀ m. n3 ≤ m → slf0(m).tail = [] ∧ ii2(m) = ii2(n3));∀ n. ∃ m. ii2(m) ≤ n ∧ n < ii2(m + 1)) ∨ ¬(∀ n. ii2(n + 1) = ii2(n) + # slf0(n) - 1 ∧ ⌜ii2(n + 1)⌝ < # σ0 ∧ σ0.drop(ii2(n)).take(# slf0(n)) = slf0(n)) ∨ ¬(∀ m, n. m ≤ n → ii2(m) ≤ ii2(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 → ii1(m) ≤ ii1(n)) ∨ ¬(∀ n. move(IOAut(start0, step0, ext0))(sf0(n), cext0 !(caf0(n) '), sf0(n + 1))) ∨ ¬ (∀ n0. frag*(IOAut(start0, step0, ext0))(slf0(n0), alf0(n0)) ∧ ext0 !(alf0(n0)) = cext0 !(caf0(n0) ') ∧ slf0(n0)[0] = sf0(n0) ∧ slf0(n0).last = sf0(n0 + 1)) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ∨ ¬ start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1))) ∨ ¬(∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ⊦
Used terms: ii, ii0, start, sf, α, n, alf, σ, n0, slf, step, ext, cext, caf
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ∨ ¬ start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1))) ∨ ¬(∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)) ⊦ |
ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ 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), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n)
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n)
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ m, n. m ≤ n → ii(m) ≤ ii(n)
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1))
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1)
| ii(0) = 0, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
σ.drop(ii0(n2)).take(# slf(n2)) = slf(n2), ii(0) = 0, ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii0(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦
Used terms: n2
| σ.drop(ii0(n2)).take(# slf(n2)) = slf(n2), ii(0) = 0, ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii0(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ |
σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(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)), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
| σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(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)), ∀ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦
Used terms: n2
| σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) ⊦ |
ext !(alf(n2)) = cext !(caf(n2) '), slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦
Used terms: n2
| ext !(alf(n2)) = cext !(caf(n2) '), slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, frag*(IOAut(start, step, ext))(slf(n2), alf(n2)), start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
ext !(alf(n2)) = cext !(caf(n2) '), # slf(n2) = # alf(n2) + 1, slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. n < # alf(n2) → IOAut(start, step, ext).step(slf(n2)[n], alf(n2)[n], slf(n2)[n +1]) ⊦
Used terms: IOAut(start, step, ext), slf(n2), alf(n2)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| ext !(alf(n2)) = cext !(caf(n2) '), # slf(n2) = # alf(n2) + 1, slf(n2).last = sf(n2 + 1), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), slf(n2)[0] = sf(n2), ii(0) = 0, ii(n2 + 1) = ii(n2) + # alf(n2), ii0(n2) = ii(n2), ii0(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n), ∀ n. n < # alf(n2) → IOAut(start, step, ext).step(slf(n2)[n], alf(n2)[n], slf(n2)[n +1]) ⊦ |
ext !(alf(n2)) = cext !(caf(n2) '), # slf(n2) = # alf(n2) + 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n1. n1 < # alf(n2) → step(slf(n2)[n1], alf(n2)[n1], slf(n2)[n1 + 1]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| ext !(alf(n2)) = cext !(caf(n2) '), # slf(n2) = # alf(n2) + 1, slf(n2).last = sf(n2 + 1), α.drop(ii(n2)).take(# alf(n2)) = alf(n2), σ.drop(ii(n2)).take(# slf(n2)) = slf(n2), slf(n2)[0] = sf(n2), ii(n2 + 1) = ii(n2) + # alf(n2), ii(0) = 0, ii0(n2 + 1) = ii(n2) + # slf(n2) - 1, ii0(0) = 0, ii0(n2) = ii(n2), ii0(n2 + 1) ≠ ii(n2 + 1), ⌜ii0(n2 + 1)⌝ < # σ, start(sf(0)), ¬ # α < ⌜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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ 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), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ ii0(n1 + 1) = ii0(n1) + # slf(n1) - 1 ∧ ⌜ii0(n1 + 1)⌝ < # σ ∧ σ.drop(ii0(n1)).take(# slf(n1)) = slf(n1)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ ii0(n1 + 1) = ii0(n1) + # slf(n1) - 1 ∧ ⌜ii0(n1 + 1)⌝ < # σ ∧ σ.drop(ii0(n1)).take(# slf(n1)) = slf(n1) |
Used terms: n1
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ m, n. m ≤ n → ii0(m) ≤ ii0(n) |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), ii0(n1) < ii0(m), start(sf(0)), m ≤ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), ii0(n1) < ii0(m), start(sf(0)), m ≤ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: m, n1
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n. ii(n + 1) = ii(n) + # alf(n) ∧ ¬ # α < ⌜ii(n + 1)⌝ ∧ α.drop(ii(n)).take(# alf(n)) = alf(n) |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # α < ⌜ii(n1 + 1)⌝ ∧ α.drop(ii(n1)).take(# alf(n1)) = alf(n1)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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(n1 + 1) = ii(n1) + # alf(n1) ∧ ¬ # α < ⌜ii(n1 + 1)⌝ ∧ α.drop(ii(n1)).take(# alf(n1)) = alf(n1) |
Used terms: n1
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ m, n. m ≤ n → ii(m) ≤ ii(n) |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), ii(n1) < ii(m), start(sf(0)), m ≤ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), ii(n1) < ii(m), start(sf(0)), m ≤ 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: m, n1
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), cext !(caf(n1) '), sf(n1 + 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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), cext !(caf(n1) '), sf(n1 + 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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ |
ext !(alf(n1)) = cext !(caf(n1) '), slf(n1).last = sf(n1 + 1), slf(n1)[0] = sf(n1), ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), frag*(IOAut(start, step, ext))(slf(n1), alf(n1)), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), cext !(caf(n1) '), sf(n1 + 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦
Used terms: n1
| ext !(alf(n1)) = cext !(caf(n1) '), slf(n1).last = sf(n1 + 1), slf(n1)[0] = sf(n1), ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), frag*(IOAut(start, step, ext))(slf(n1), alf(n1)), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), cext !(caf(n1) '), sf(n1 + 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ |
ext !(alf(n1)) = cext !(caf(n1) '), slf(n1).last = sf(n1 + 1), slf(n1)[0] = sf(n1), ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), frag*(IOAut(start, step, ext))(slf(n1), alf(n1)), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), ext !(alf(n1)), sf(n1 + 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦
| ext !(alf(n1)) = cext !(caf(n1) '), slf(n1).last = sf(n1 + 1), slf(n1)[0] = sf(n1), ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), frag*(IOAut(start, step, ext))(slf(n1), alf(n1)), start(sf(0)), ¬ move(IOAut(start, step, ext))(sf(n1), ext !(alf(n1)), sf(n1 + 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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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: n1
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(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. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) ⊦ ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1) |
ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ frag*(IOAut(start, step, ext))(slf(n1), alf(n1)) ∧ ext !(alf(n1)) = cext !(caf(n1) ') ∧ slf(n1)[0] = sf(n1) ∧ slf(n1).last = sf(n1 + 1)
| ii(0) = 0, ii0(0) = 0, ii0(n2 + 1) ≠ ii(n2 + 1), start(sf(0)), (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)), ∀ n0. frag*(IOAut(start, step, ext))(slf(n0), alf(n0)) ∧ ext !(alf(n0)) = cext !(caf(n0) ') ∧ slf(n0)[0] = sf(n0) ∧ slf(n0).last = sf(n0 + 1), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), ∀ 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) ⊦ frag*(IOAut(start, step, ext))(slf(n1), alf(n1)) ∧ ext !(alf(n1)) = cext !(caf(n1) ') ∧ slf(n1)[0] = sf(n1) ∧ slf(n1).last = sf(n1 + 1) |
Used terms: n1
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ ∀ n. ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(⌜al⌝ ) = cext !(⌜caf(n) '⌝ ) ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) |
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) |
move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
Used terms: n
| move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∃ al, sl. frag*(IOAut(start, step, ext))(sl, al) ∧ sf(n) = sl[0] ∧ sf(n + 1) = sl.last ∧ IOAut(start, step, ext).ext !(al) = cext !(caf(n) ') ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
Used terms: IOAut(start, step, ext), sf(n), cext !(caf(n) '), sf(n + 1)
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )), ∃ al, sl. frag*(IOAut(start, step, ext))(sl, al) ∧ sf(n) = sl[0] ∧ sf(n + 1) = sl.last ∧ IOAut(start, step, ext).ext !(al) = cext !(caf(n) ') ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) |
ext !(al) = cext !(caf(n) '), sf(n) = sl[0], sf(n + 1) = sl.last, frag*(IOAut(start, step, ext))(sl, al), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1)
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| ext !(al) = cext !(caf(n) '), sf(n) = sl[0], sf(n + 1) = sl.last, frag*(IOAut(start, step, ext))(sl, al), start(sf(0)), ¬ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) ⊦ ∃ sl, al. frag*(IOAut(start, step, ext))(sl, al) ∧ ext !(al) = cext !(caf(n) ') ∧ sl[0] = sf(n) ∧ sl.last = sf(n + 1) |
Used terms: sl, al
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.