| VFS_PAGE_SIZE = n0 + m2 % VFS_PAGE_SIZE, files0[ino0] = mkfile(m2, md0, # links(ino0, dirs), content0), files0[ino] = mkfile(m, md, m0, content), afs-cons(dirs, files0), ino ∈ files0, ino0 ∈ files0, m2 / VFS_PAGE_SIZE ∈ content0 ⊦ m2 % VFS_PAGE_SIZE = 0, m = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;files0[ino] ) .size ∧ md = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;files0[ino] ) .meta ∧ m0 = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;files0[ino] ) .nlink ∧ content.stream to m = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;files0[ino] ) .content .stream to (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;files0[ino] ) .size |
VFS_PAGE_SIZE = n0 + m2 % VFS_PAGE_SIZE, files0[ino0] = mkfile(m2, md0, # links(ino0, dirs), content0), files0[ino] = mkfile(m, md, # links(ino, dirs), content), afs-cons(dirs, files0), ino ∈ files0, ino0 ∈ files0, m2 / VFS_PAGE_SIZE ∈ content0 ⊦ m2 % VFS_PAGE_SIZE = 0, m = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .size ∧ md = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .meta ∧ # links(ino, dirs) = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .nlink ∧ content.stream to (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .size = (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .content .stream to (ino = ino0 ⊃ mkfile (m2, md0, # links(ino0, dirs), content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n0)] upto m2) ;mkfile(m, md, # links(ino, dirs), content) ) .size
Used simplifier rules: afs-cons-file-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ files ∧ files[ino] = mkfile(m, md, n, content) → # links(ino, dirs) = n; (forward) from specification afs-base