| finp(σ), # nextl(0, a) = ii(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(n0 + 1) = ii(n0) + # lf(n0 + 1) - 1, (σ from ii(n0)) to # lf(n0 + 1) = ⌜lf(n0 + 1)⌝ , ⌜ii(1)⌝ < # σ, a ∈ nextl(0, a), ⌜ii(n0 + 1)⌝ < # σ, ∀ n. σ[ii(n)] = lf(n).last, ∀ 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)) ⊦ ∃ n. # σ = ⌜ii(n)⌝ + ⌜1⌝ ∧ (∀ m. n ≤ m → nextl(m, σ[ii(m)]) = σ[ii(m)] ' ∧ ii(n) = ii(m)), lf(n0) = [], σ = [], nextl(0, a) = [] |
# nextl(0, a) = ii(1) + 1, lf(n0 + 1) = nextl(n0, lf(n0).last), x to ii(1) + 1 = nextl(0, a), ii(0) = 0, lf(0) = a ', lf(1) = nextl(0, a), nextl(0, a) = a ' + y, ii(n0 + 1) = ii(n0) + # lf(n0 + 1) - 1, (x from ii(n0)) to # lf(n0 + 1) = lf(n0 + 1), 1 + ii(n) = # x, a ∈ nextl(0, a), ii(1) ≤ ii(n), ii(n0 + 1) ≤ ii(n), ∀ 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, ∀ m. n ≤ m → lf(m + 1).rest = [] ∧ ii(m) = ii(n), ∀ n1. x[ii(n1)] = lf(n1).last, ∀ n1. ii(n1 + 1) = ii(n1) + # lf(n1 + 1) - 1 ∧ ¬ ii(n) < ii(n1 + 1) ∧ (x from ii(n1)) to # lf(n1 + 1) = lf(n1 + 1) ⊦ nextl(0, a) = [], lf(n0) = [], x = [], ∃ n1. 1 + ii(n1) = # x ∧ (∀ m. n1 ≤ m → nextl(m, x[ii(m)]) = x[ii(m)] ' ∧ ii(n1) = ii(m))
Used simplifier rules: sel-fin: ⊦ ⌜x⌝ [n] = x[n]; from specification stream%test-02: ⊦ finp(⌜x⌝ ); from specification stream-basic%fin-empty: ⊦ ⌜x⌝ = [] ↔ x = []; from specification stream%eq-natinf-to-nat-2-1: ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; from specification nat-inf%size-fin: ⊦ # ⌜x⌝ = ⌜# x⌝ ; from specification stream%from-fin: ⊦ ⌜x⌝ from n = ⌜x from n⌝ ; from specification stream%inj-02: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; from specification stream-basic%to-fin: ⊦ ⌜x⌝ to n = ⌜x to n⌝ ; from specification stream%stream-fin-forward: ⊦ finp(σ) → (∃ x. ⌜x⌝ = σ); (forward) from specification stream-basic%lels: ⊦ ¬ m < n ↔ n ≤ m; from specification nat%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%s: ⊦ m < n + 1 ↔ ¬ n < m; from specification nat-basic2%inf-inseq-reduce: ⊦ n∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); from specification nat-inf%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