| ino ∈ files0 ↔ ino ∈ files1, files2[ino] = mkfile(m1, md0, m2, content0), files0[ino] = mkfile(m, md, m0, content), ino ∈ files0 → files0[ino].size = files1[ino].size ∧ files0[ino].meta = files1[ino].meta ∧ files0[ino].nlink = files1[ino].nlink ∧ files0[ino].content.stream to files0[ino].size = files1[ino].content.stream to files1[ino].size, ∀ ino. (ino ∈ files1 ↔ ino ∈ files2) ∧ ( ino ∈ files1 → files1[ino].size = files2[ino].size ∧ files1[ino].meta = files2[ino].meta ∧ files1[ino].nlink = files2[ino].nlink ∧ files1[ino].content.stream to files1[ino].size = files2[ino].content.stream to files2[ino].size) ⊦ (ino ∈ files0 ↔ ino ∈ files2) ∧ ( ino ∈ files0 → m = m1 ∧ md = md0 ∧ m0 = m2 ∧ (λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to m1 = (λ n. (n / VFS_PAGE_SIZE ∈ content0 ⊃ content0[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to m1) |
ino ∈ files0 ↔ ino ∈ files1, files2[ino] = mkfile(m1, md0, m2, content0), files0[ino] = mkfile(m, md, m0, content), ino ∈ files1 → m = files1[ino].size ∧ md = files1[ino].meta ∧ m0 = files1[ino].nlink ∧ (λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to files1[ino].size = (λ n. (n / VFS_PAGE_SIZE ∈ files1[ino].content ⊃ files1[ino].content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to files1[ino].size, ∀ ino0. (ino0 ∈ files1 ↔ ino0 ∈ files2) ∧ ( ino0 ∈ files1 → files1[ino0].size = files2[ino0].size ∧ files1[ino0].meta = files2[ino0].meta ∧ files1[ino0].nlink = files2[ino0].nlink ∧ (λ n. (n / VFS_PAGE_SIZE ∈ files1[ino0].content ⊃ files1[ino0].content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to files1[ino0].size = (λ n. (n / VFS_PAGE_SIZE ∈ files2[ino0].content ⊃ files2[ino0].content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to files2[ino0].size) ⊦ (ino ∈ files1 ↔ ino ∈ files2) ∧ ( ino ∈ files1 → m = m1 ∧ md = md0 ∧ m0 = m2 ∧ (λ n. (n / VFS_PAGE_SIZE ∈ content ⊃ content[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to m1 = (λ n. (n / VFS_PAGE_SIZE ∈ content0 ⊃ content0[n / VFS_PAGE_SIZE];zeropage)[n % VFS_PAGE_SIZE]) to m1)
Used simplifier rules: stream: ⊦ content.stream = ⌜λ n. getbyte(n, content)⌝ ;%getbyte: ⊦ getbyte(m, content) = getpage(m / VFS_PAGE_SIZE, content)[m % VFS_PAGE_SIZE];%getpage: ⊦ getpage(n, content) = (n ∈ content ⊃ content[n];zeropage);% ⊦ mkfile(m, md, m0, content).content = content; (s)% ⊦ mkfile(m, md, m0, content).nlink = m0; (s)% ⊦ mkfile(m, md, m0, content).meta = md; (s)% ⊦ mkfile(m, md, m0, content).size = m; (s)% ⊦ ⌜dx⌝ = ⌜dx0⌝ ↔ dx = dx0; (s)% ⊦ ⌜nf0⌝ to n = ⌜nf0 to n⌝ ; (s)