| # avols1[v] = # avols0[v], n < # avols0[v], v ∈ avols1, v ∈ avols0, avols0[v][n] ≠ unmapped → (avols0[v][n] = erased → avols1[v][n] = erased) ∧ ¬ avols0[v][n].mapped?, avols1[v][n] ≠ unmapped → (avols1[v][n] = erased → avols0[v][n] = erased) ∧ ¬ avols1[v][n].mapped? ⊦ avols0[v][n] = avols1[v][n] |
# avols1[v] = # avols0[v], unmapped = avols0[v][n], n < # avols0[v], v ∈ avols0, v ∈ avols1, avols1[v][n] ≠ unmapped → (avols1[v][n] = erased → avols0[v][n] = erased) ∧ ¬ avols1[v][n].mapped?, avols0[v][n] ≠ unmapped → (avols0[v][n] = erased → avols1[v][n] = erased) ∧ ¬ avols0[v][n].mapped? ⊦ avols0[v][n] = avols1[v][n]
Used simplifier rules: leb freely generated by unmapped, erased, mapped;;% ⊦ erased ≠ mapped(buf, m); (s)% ⊦ unmapped ≠ mapped(buf, m); (s)% ⊦ mapped(buf, m).mapped?; (s)% ⊦ unmapped ≠ erased; (s)