| wlar[m, wl-entry(m0, stat)][n0] = wl-entry(m3, stat2), wlar[n0] = wl-entry(m1, stat0), wlar[m] = wl-entry(m2, stat1), m < # wlar, n0 < # wlar, m ≤ n0, ∀ wlar, m, wle. n0 ≤ # wlar → ecs(wlar[m, wle], n0) = (m < n0 ⊃ (ecs(wlar, n0) -- wlar[m].ec) ++ wle.ec;ecs(wlar, n0)) ⊦ ecs(wlar[m, wl-entry(m0, stat)], n0) ++ m3 = (ecs(wlar, n0) -- m2) ++ m1 ++ m0, m1 = m2, n0 = m |
wlar[n0] = wl-entry(m1, stat0), wlar[m] = wl-entry(m2, stat1), m + 1 < # wlar, n0 < # wlar, m < # wlar, m < n0, ∀ wlar, m, wle. n0 ≤ # wlar → ecs(wlar[m, wle], n0) = (m < n0 ⊃ (ecs(wlar, n0) -- wlar[m].ec) ++ wle.ec;ecs(wlar, n0)) ⊦ (ecs(wlar, n0) -- m2) ++ m0 = ecs(wlar[m, wl-entry(m0, stat)], n0), m1 = m2, n0 = m
Used simplifier rules: ⊦ bag ++ n ++ n0 = bag2 ++ n ↔ bag ++ n0 = bag2; (ss)% ⊦ m +1 = m + 1; (s)% ⊦ m < n → n ≠ 0; (s)% ⊦ wl-entry(m, stat) = wl-entry(m0, stat0) ↔ m = m0 ∧ stat = stat0; (ws)%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)% ⊦ m ≠ n → wlar[n, wle][m] = wlar[m]; (s)