| #((σ to n0 + m) + σ0 from m) = #((σ to m + n0) from m) + # σ0, #((σ to m + n0) from m) = ⌜n1⌝ , #((σ to m + n0) from m) < ⌜n0⌝ + # σ0, ⌜n⌝ < #((σ to m + n0) from m) + # σ0, ⌜n⌝ < ⌜n0⌝ + # σ0 ⊦ #((σ to m + n0) from m) = ∞, ((σ to n0 + m) + σ0)[m + n] = σ0[n - n1], σ0 = [], ⌜n⌝ < #((σ to m + n0) from m), # σ < ⌜m⌝ + ⌜n0⌝ , # σ < ⌜n0⌝ + ⌜m⌝ |
#((σ to n0 + m) + σ0 from m) = ⌜n1⌝ + # σ0, #((σ to m + n0) from m) = ⌜n1⌝ , ⌜n1⌝ < ⌜n0⌝ + # σ0, ⌜n⌝ < ⌜n1⌝ + # σ0, ⌜n⌝ < ⌜n0⌝ + # σ0, n1 ≤ n ⊦ ((σ to n0 + m) + σ0)[m + n] = σ0[n - n1], σ0 = [], # σ < ⌜m⌝ + ⌜n0⌝ , # σ < ⌜n0⌝ + ⌜m⌝
Used simplifier rules: size-empty-equiv: ⊦ # σ = ⌜0⌝ ↔ σ = [];% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < 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⌝ < n∞ + ⌜n⌝ ↔ n∞ ≠ ⌜0⌝ ; (s)% ⊦ ⌜m⌝ ≠ ∞; (s)%lels-trans: ⊦ ¬ n∞1 < n∞ ∧ n∞1 < n∞2 → n∞ < n∞2; (forward) from specification nat-inf