| root[path].dir? ↔ ino2 ∈ dirs, root.dir?, dom of < ino6, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), ispath(path, ROOT_INO, ino2, dirs, files), of-cons(of, dirs, files), pr (user, (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .meta), px-parent(user, path, ROOT_INO, dirs, files), psynced → asynced, ino2 ∈ dirs ∨ ino2 ∈ files ⊦ [if (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .directory then ino1 := (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .nsubdirs + 2 else ino1 := (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .nlink] ⟨posix_readmeta#(path, user, root, abs-files(files), abs-of(of); md0, ino4, ino3, err0)⟩ ( (psynced → asynced) ∧ (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .meta = md0 ∧ ino1 = ino4 ∧ (ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) .size = ino3 ∧ ESUCCESS = err0) |
(ino2 ∈ dirs ⊃ mkinode(ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode(ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ) = mkinode(m, md, boolvar, m0, m1, m2), root[path].dir? ↔ ino2 ∈ dirs, root.dir?, dom of < ino6, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), ispath(path, ROOT_INO, ino2, dirs, files), of-cons(of, dirs, files), pr(user, md), px-parent(user, path, ROOT_INO, dirs, files), psynced → asynced, ino2 ∈ dirs ∨ ino2 ∈ files ⊦ [if boolvar then ino1 := m1 + 2 else ino1 := m0] ⟨posix_readmeta#(path, user, root, abs-files(files), abs-of(of); md0, ino4, ino3, err0)⟩ ((psynced → asynced) ∧ md = md0 ∧ ino1 = ino4 ∧ m2 = ino3 ∧ ESUCCESS = err0)
Used simplifier rules: ⊦ ( ( ( (m = inode.ino ∧ md = inode.meta) ∧ (boolvar ↔ inode.directory)) ∧ m0 = inode.nlink) ∧ m1 = inode.nsubdirs) ∧ m2 = inode.size ↔ inode = mkinode(m, md, boolvar, m0, m1, m2); (elim) Used terms: (ino2 ∈ dirs ⊃ mkinode (ino2, dirs[ino2].meta, true, dirs[ino2].nlink, dirs[ino2].nsubdirs, dirs[ino2].size) ;mkinode (ino2, files[ino2].meta, false, files[ino2].nlink, 0, files[ino2].size) ), m, md, boolvar, m0, m1, m2