| # buf2 = VFS_PAGE_SIZE, files[m] = mkfile(m0, md, # links(m, dirs), content), afs-cons(dirs, files), m ∈ files, ino0 + n ≤ # buf0, ino + n ≤ VFS_PAGE_SIZE ⊦ ∀ ino1, name, n0. ROOT_INO ∈ dirs ∧ (ino1 ∈ dirs ∧ ino1 ≠ ROOT_INO ∧ links(ino1, dirs) = ∅ → dir-empty(ino1, dirs, files)) ∧ ( ino1 ∈ dirs → ¬ ino1 ∈ files ∧ dirs[ino1].nlink = # links(ino1, dirs) ∧ dirs[ino1].nlink ≤ 1 ∧ dirs[ino1].size = # dirs[ino1].entries ∧ dirs[ino1].nsubdirs = # subdirs(ino1, dirs)) ∧ (ino1 ∈ files → ¬ ino1 ∈ dirs ∧ files[ino1].nlink = # links(ino1, dirs)) ∧ (ino1 ∈ dirs ∧ name ∈ dirs[ino1].entries → valid-ino(dirs[ino1].entries[name], dirs, files)) ∧ (ino1 ∈ files ∧ n0 ∈ files[ino1].content → valid-pagesize(ino1, n0, files)) → ROOT_INO ∈ dirs ∧ ( ino1 ∈ dirs ∧ ino1 ≠ ROOT_INO ∧ links(ino1, dirs) = ∅ → dir-empty(ino1, dirs, files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])])) ∧ ( ino1 ∈ dirs → ¬ ino1 ∈ files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])] ∧ dirs[ino1].nlink = # links(ino1, dirs) ∧ dirs[ino1].nlink ≤ 1 ∧ dirs[ino1].size = # dirs[ino1].entries ∧ dirs[ino1].nsubdirs = # subdirs(ino1, dirs)) ∧ ( ino1 ∈ files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])] → ¬ ino1 ∈ dirs ∧ files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])][ino1].nlink = # links(ino1, dirs)) ∧ ( ino1 ∈ dirs ∧ name ∈ dirs[ino1].entries → valid-ino(dirs[ino1].entries[name], dirs, files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])])) ∧ ( ino1 ∈ files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])] ∧ n0 ∈ files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])][ino1].content → valid-pagesize(ino1, n0, files[m, mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)])])) |
# buf2 = VFS_PAGE_SIZE, files[m] = mkfile(m0, md, # links(m, dirs), content), afs-cons(dirs, files), ROOT_INO ∈ dirs, m ∈ files, ino + n ≤ VFS_PAGE_SIZE, ino0 + n ≤ # buf0, ino1 ∈ files → ¬ ino1 ∈ dirs ∧ files[ino1].nlink = # links(ino1, dirs), ino1 ∈ dirs ∧ ino1 ≠ ROOT_INO ∧ links(ino1, dirs) = ∅ → dirs[ino1].entries = ∅, ino1 ∈ dirs → dirs[ino1].nlink = # links(ino1, dirs) ∧ dirs[ino1].nlink ≤ 1 ∧ dirs[ino1].size = # dirs[ino1].entries ∧ dirs[ino1].nsubdirs = # subdirs(ino1, dirs), ino1 ∈ dirs ∧ name ∈ dirs[ino1].entries → dirs[ino1].entries[name] ∈ dirs ∨ dirs[ino1].entries[name] ∈ files, ino1 ∈ files ∧ n0 ∈ files[ino1].content → # files[ino1].content[n0] = VFS_PAGE_SIZE ⊦ ( ino1 ∈ files → ¬ ino1 ∈ dirs ∧ (ino1 = m ⊃ mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)]);files[ino1]).nlink = # links(ino1, dirs)) ∧ ( ino1 ∈ files ∧ n0 ∈ (ino1 = m ⊃ mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)]);files[ino1]).content → # (ino1 = m ⊃ mkfile(m0, md, # links(m, dirs), content[pageno, copy(buf0, ino0, buf2, ino, n)]);files[ino1]).content[n0] = VFS_PAGE_SIZE)
Used simplifier rules: ⊦ files[ino, af][ino0] = (ino0 = ino ∧ ino ∈ files ⊃ af;files[ino0]); (s)% ⊦ ino ∈ files[ino0, af] ↔ ino ∈ files; (s)% ⊦ afs-cons(dirs, files) → ROOT_INO ∈ dirs; (ss)%⊦ valid-pagesize(ino, n, files) ↔ # files[ino].content[n] = VFS_PAGE_SIZE; (s)% ⊦ valid-ino(ino, dirs, files) ↔ ino ∈ dirs ∨ ino ∈ files; (s)% ⊦ afs-cons(dirs, files) ∧ ino ∈ dirs → ¬ ino ∈ files; (s)% ⊦ dir-empty(ino, dirs, files) ↔ dirs[ino].entries = ∅; (s)