| lf(n2 + 1) = nextl(n2, lf(n2).last), lf(n2 + 1).first = lf(n2).last, # nextl(0, a) = ii(1) + 1, (σ from ii(n0)) to # lf(n0 + 1) = ⌜lf(n0 + 1)⌝ , ii(n0 + 1) = ii(n0) + # lf(n0 + 1) - 1, lf(n0 + 1) = nextl(n0, lf(n0).last), σ to ii(1) + 1 = ⌜nextl(0, a)⌝ , ii(0) = 0, lf(0) = a ', lf(1) = nextl(0, a), nextl(0, a) = a ' + y, ii(n2 + 1) = ii(n2) + # lf(n2 + 1) - 1, #((σ from ii(n2)) to # lf(n2 + 1)) = ⌜# lf(n2 + 1)⌝ , ((σ from ii(n2)) to # lf(n2 + 1))[0] = lf(n2).last, ⌜ii(n0 + 1)⌝ < # σ, ⌜ii(1)⌝ < # σ, a ∈ nextl(0, a), ⌜ii(n2 + 1)⌝ < # σ, ∀ n. ii(n + 1) = ii(n) + # lf(n + 1) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ (σ from ii(n)) to # lf(n + 1) = ⌜lf(n + 1)⌝ , ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. lf(n + 1) = nextl(n, lf(n).last) ∧ lf(n) ≠ [], ∀ n, a. nextl(n, a) ≠ [] ∧ nextl(n, a).first = a, (finp(σ) ⊃ # σ = ⌜ii(n)⌝ + ⌜1⌝ ∧ (∀ m. n ≤ m → lf(m + 1).rest = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ lf(n2 + 1) = [], lf(n2) = [], σ[ii(n2)] = lf(n2).last, lf(n0) = [], σ = [], nextl(0, a) = [], (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ + ⌜1⌝ ∧ (∀ m. n ≤ m → nextl(m, σ[ii(m)]) = σ[ii(m)] ' ∧ ii(n) = ii(m));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) ∧ (σ from ii(n0)) to # nextl(n0, σ[ii(n0)]) = ⌜nextl(n0, σ[ii(n0)])⌝ ∧ ii(n0 + 1) = ii(n0) + # nextl(n0, σ[ii(n0)]) - 1 ∧ σ[0] = a |
ii(n2) + # lf(n2 + 1) = m0 + 1 ∧ ii(n2) + # lf(n2 + 1) ≠ 0, lf(n2 + 1) = nextl(n2, lf(n2).last), lf(n2 + 1).first = lf(n2).last, # nextl(0, a) = ii(1) + 1, (σ from ii(n0)) to # lf(n0 + 1) = ⌜lf(n0 + 1)⌝ , ii(n0 + 1) = ii(n0) + # lf(n0 + 1) - 1, lf(n0 + 1) = nextl(n0, lf(n0).last), σ to ii(1) + 1 = ⌜nextl(0, a)⌝ , ii(0) = 0, lf(0) = a ', lf(1) = nextl(0, a), nextl(0, a) = a ' + y, ii(n2 + 1) = m0, #((σ from ii(n2)) to # lf(n2 + 1)) = ⌜# lf(n2 + 1)⌝ , ((σ from ii(n2)) to # lf(n2 + 1))[0] = lf(n2).last, ⌜ii(n0 + 1)⌝ < # σ, ⌜ii(1)⌝ < # σ, a ∈ nextl(0, a), ⌜ii(n2 + 1)⌝ < # σ, ∀ n. ii(n + 1) = ii(n) + # lf(n + 1) - 1 ∧ ⌜ii(n + 1)⌝ < # σ ∧ (σ from ii(n)) to # lf(n + 1) = ⌜lf(n + 1)⌝ , ∀ m, n. m ≤ n → ii(m) ≤ ii(n), ∀ n. lf(n + 1) = nextl(n, lf(n).last) ∧ lf(n) ≠ [], ∀ n, a. nextl(n, a) ≠ [] ∧ nextl(n, a).first = a, (finp(σ) ⊃ # σ = ⌜ii(n)⌝ + ⌜1⌝ ∧ (∀ m. n ≤ m → lf(m + 1).rest = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ lf(n2 + 1) = [], lf(n2) = [], σ[ii(n2)] = lf(n2).last, lf(n0) = [], σ = [], nextl(0, a) = [], (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ + ⌜1⌝ ∧ (∀ m. n ≤ m → nextl(m, σ[ii(m)]) = σ[ii(m)] ' ∧ ii(n) = ii(m));∃ m. ii(m) ≤ n1 ∧ n1 < ii(m + 1)) ∧ (σ from ii(n0)) to # nextl(n0, σ[ii(n0)]) = ⌜nextl(n0, σ[ii(n0)])⌝ ∧ ii(n0 + 1) = ii(n0) + # nextl(n0, σ[ii(n0)]) - 1 ∧ σ[0] = a
Used simplifier rules: z-01: ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; from specification nat-basic2%l: ⊦ # x = 0 ↔ x = []; from specification list-data%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: ii(n2) + # lf(n2 + 1), m0