| ii(0) = 0, ∀ m0. m0 < m → ii(m0 + 1) = ii(m0) + # lf(m0) ∧ (nf from ii(m0)) to # lf(m0) = lf(m0) ∧ (∀ m1. m1 ≤ m0 → ii(m1) ≤ ii(m0)) ⊦ ((λ n. (n < ii(m) + # lf(m) ∧ ¬ n < ii(m) ⊃ lf(m)[n - ii(m)];nf(n))) from ii(m)) to # lf(m) = lf(m) |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
Used simplifier rules: size-inf-to: ⊦ #(nf to n) = n; from specification stream%lels: ⊦ ¬ m < n ↔ n ≤ m; from specification nat%ls-le-simp: ⊦ m < n → (n ≤ m ↔ false); from specification nat%get-infto: m < n ⊦ (nf to n)[m] = nf(m); from specification stream%get-from-inf: ⊦ ((nf from n))(m) = nf(m + n); from specification stream%l: ⊦ m + n < m + n0 ↔ n < n0; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%l-02: ⊦ ¬ m + n < m; from specification nat-basic2%eq-01: ⊦ m + n - m = n; from specification nat Used terms: lf(m), ( (λ n. (n < ii(m) + # lf(m) ∧ ¬ n < ii(m) ⊃ lf(m)[n - ii(m)] ;nf(n) )) from ii(m)) to # lf(m)