| v0 ∈ avols ↔ v0 ∈ avols0, v0 = v, m2 < # avols[v], ebm-cons(avols), ebm-cons(avols0), is-aligned(m1, EB_PAGE_SIZE), is-aligned(n, EB_PAGE_SIZE), v ∈ avols, m1 + n ≤ LEB_SIZE, n + n2 ≤ # buf, v0 ∈ avols0 → # avols[v0] = # avols0[v0] ∧ (∀ m. m < # avols[v0] ∧ avols[v0][m] ≠ unmapped → (avols[v0][m] = erased → avols0[v0][m] = erased) ∧ (avols[v0][m].mapped? → avols0[v0][m] = avols[v0][m])) ⊦ n = 0, avols[v][m2].mapped?, (v0 ∈ avols[v, avols[v][m2, unmapped]] ↔ v0 ∈ avols0) ∧ ( v0 ∈ avols[v, avols[v][m2, unmapped]] → # avols[v, avols[v][m2, unmapped]][v0] = # avols0[v0] ∧ ( m < # avols[v, avols[v][m2, unmapped]][v0] ∧ avols[v, avols[v][m2, unmapped]][v0][m] ≠ unmapped → (avols[v, avols[v][m2, unmapped]][v0][m] = erased → avols0[v0][m] = erased) ∧ (avols[v, avols[v][m2, unmapped]][v0][m].mapped? → avols0[v0][m] = avols[v, avols[v][m2, unmapped]][v0][m]))) |
# avols[v] = # avols0[v], m < # avols0[v], m2 < # avols0[v], ebm-cons(avols), ebm-cons(avols0), is-aligned(m1, EB_PAGE_SIZE), is-aligned(n, EB_PAGE_SIZE), v ∈ avols0, v ∈ avols, m1 + n ≤ LEB_SIZE, n + n2 ≤ # buf, ∀ m. m < # avols0[v] ∧ avols[v][m] ≠ unmapped → (avols[v][m] = erased → avols0[v][m] = erased) ∧ (avols[v][m].mapped? → avols0[v][m] = avols[v][m]) ⊦ avols[v][m2, unmapped][m] = unmapped, n = 0, avols[v][m2].mapped?, (avols[v][m] = erased → avols0[v][m] = erased) ∧ (avols[v][m].mapped? → avols0[v][m] = avols[v][m])
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%m ≠ n ⊦ evol[m, leb][n] = evol[n]; (s)% ⊦ m < # evol → evol[m, leb][m] = leb; (s)% ⊦ # evol[n, leb] = # evol; (s)% ⊦ avols[v, evol][v] = evol; (s)% ⊦ v ∈ avols[v, evol]; (s)