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