| m0 = m, v ∈ avols0, ∀ v. (v ∈ avols0 ↔ v ∈ avols1) ∧ ( v ∈ avols0 → # avols0[v] = # avols1[v] ∧ (∀ m. m < # avols0[v] ∧ avols0[v][m] ≠ unmapped → (avols0[v][m] = erased → avols1[v][m] = erased) ∧ (avols0[v][m].mapped? → avols1[v][m] = avols0[v][m]))) ⊦ # avols0[v] = # avols1[v] ∧ ( m0 < # avols0[v] ∧ avols0[v][m, leb][m0] ≠ unmapped → (avols0[v][m, leb][m0] = erased → avols1[v][m, leb][m0] = erased) ∧ (avols0[v][m0].mapped? → avols1[v][m, leb][m0] = avols0[v][m, leb][m0])) |
v ∈ avols0, ∀ v. (v ∈ avols0 ↔ v ∈ avols1) ∧ ( v ∈ avols0 → # avols0[v] = # avols1[v] ∧ (∀ m. m < # avols0[v] ∧ avols0[v][m] ≠ unmapped → (avols0[v][m] = erased → avols1[v][m] = erased) ∧ (avols0[v][m].mapped? → avols1[v][m] = avols0[v][m]))) ⊦ # avols0[v] = # avols1[v]
Used simplifier rules: m < # evol ⊦ evol[m, leb][m] = leb; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m < n → n ≠ 0; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ unmapped ≠ erased; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < # evol → evol[m, leb][m] = leb; (s)