| dirs[m] = mkdir(m5, md1, m6, m7, entries), files[m] = mkfile(m3, md0, m4, content), afs-cons(dirs, files), m ∈ dirs ∧ m0 = m6 ∧ m2 = m5 ∧ m1 = m7 ∧ boolvar ∨ m ∈ files ∧ m0 = m4 ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟪asynced := ?⟫ afs-cons (dirs, files[mkinode(m, md, boolvar, m0, m1, m2).ino, files[mkinode(m, md, boolvar, m0, m1, m2).ino].meta:= mkinode(m, md, boolvar, m0, m1, m2).meta] [mkinode(m, md, boolvar, m0, m1, m2).ino, files [mkinode(m, md, boolvar, m0, m1, m2).ino, files[mkinode(m, md, boolvar, m0, m1, m2).ino].meta:= mkinode(m, md, boolvar, m0, m1, m2).meta ] [mkinode(m, md, boolvar, m0, m1, m2).ino ] .size:= mkinode(m, md, boolvar, m0, m1, m2).size ]), mkinode(m, md, boolvar, m0, m1, m2).directory |
files[m] = mkfile(m3, md0, # links(m, dirs), content), dirs[m] = mkdir(m5, md1, m6, m7, entries), afs-cons(dirs, files), m ∈ files ⊦ ⟪asynced := ?⟫ afs-cons(dirs, files[m, mkfile(m2, md, # links(m, dirs), content)])
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% ⊦ mkfile(m, md, m0, content).size:= m1 = mkfile(m1, md, m0, content); (s)% ⊦ mkfile(m, md, m0, content).meta:= md0 = mkfile(m, md0, m0, content); (s)% ⊦ files[ino, af][ino, af0] = files[ino, af0]; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).size = m2; (s)% ⊦ files[ino, af][ino0] = (ino0 = ino ∧ ino ∈ files ⊃ af;files[ino0]); (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).meta = md; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).directory ↔ boolvar; (s)