| # buf = VFS_PAGE_SIZE, m0 * VFS_PAGE_SIZE + n1 = n0 + n * VFS_PAGE_SIZE, n1 < VFS_PAGE_SIZE, n ≤ m0 ⊦ (m0 = n ∨ m0 ∈ content ⊃ content[n, buf][m0];zeropage)[n1] = (⌜buf⌝ + ⌜(λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE⌝ )[n0 ] |
⊦ ⌜m⌝ < # σ0 → (σ0 + σ2)[m] = σ0[m]
# buf = VFS_PAGE_SIZE, m0 * VFS_PAGE_SIZE + n1 = n0 + n * VFS_PAGE_SIZE, n1 < VFS_PAGE_SIZE, n ≤ m0 ⊦ (m0 = n ∨ m0 ∈ content ⊃ content[n, buf][m0];zeropage)[n1] = (⌜buf⌝ + ⌜(λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE⌝ )[n0 ], ⌜n0⌝ < # ⌜buf⌝
Used simplifier rules: ⊦ # ⌜buf⌝ = ⌜# buf⌝ ; (s)% ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)% ⊦ n < # buf → ⌜buf⌝ [n] = buf[n]; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ n0 < n ∧ n1 < n → (m * n + n0 = m0 * n + n1 ↔ m = m0 ∧ n0 = n1); (ws)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ n = n0 → content[n0, buf][n] = buf; (s) Used terms: n0, ⌜ (λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE] ;zeropage ) [n % VFS_PAGE_SIZE ]) from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE ⌝ , ⌜buf⌝