| # buf = VFS_PAGE_SIZE, ((m0 => mkfile(m1, md0, # links(m0, dirs), content) * F))(files), afs-cons(dirs, files) ⊦ ((m0 => mkfile(m1, md0, # links(m0, dirs), content[n, buf]) * F))(files[m0, mkfile(m1, md0, # links(m0, dirs), content[n, buf])]) ∧ content[n, buf].stream = (content.stream to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (content.stream from VFS_PAGE_SIZE * n + VFS_PAGE_SIZE) |
⊦ # buf = VFS_PAGE_SIZE → content[n, buf].stream = (content.stream to n * VFS_PAGE_SIZE) + ⌜buf⌝ + (content.stream from (n + 1) * VFS_PAGE_SIZE)
Used simplifier rules: ⊦ m * (n + 1) = m * n + m; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%append-assoc: ⊦ (σ0 + σ3) + σ4 = σ0 + σ3 + σ4; from specification stream[buffer-inf]%sep-ass: ⊦ (F * F0) * F1 = F * F0 * F1; from specification heap-sep[file-heap]%sep-com: ⊦ F * F0 = F0 * F; from specification heap-sep[file-heap]% ⊦ ((ino => af * F))(files) → ino ∈ files; (s)%ino ∈ files ⊦ ((ino => af * F))(files) → (((ino => af0 * F))(files[ino, af1]) ↔ af0 = af1); (ss) Used terms: buf, n, content