| files[m] = mkfile(m3, md0, m4, content), dirs[m] = mkdir(m5, md1, m6, m7, entries), mkinode(m, md, boolvar, m0, m1, m2).directory, afs-cons(dirs, files), m ∈ dirs ∧ m0 = m6 ∧ m2 = m5 ∧ m1 = m7 ∧ boolvar ∨ m ∈ files ∧ m0 = m4 ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟪asynced := ?⟫ afs-cons (dirs[mkinode(m, md, boolvar, m0, m1, m2).ino, dirs[mkinode(m, md, boolvar, m0, m1, m2).ino].meta:= mkinode(m, md, boolvar, m0, m1, m2).meta], files) |
files[m] = mkfile(m3, md0, m4, content), dirs[m] = mkdir(m5, md1, # links(m, dirs), m7, entries), afs-cons(dirs, files), m ∈ dirs ⊦ ⟪asynced := ?⟫ afs-cons(dirs[m, mkdir(m5, md, # links(m, dirs), m7, entries)], files)
Used simplifier rules: ⊦ mkdir(m, md, m0, m1, entries).meta:= md0 = mkdir(m, md0, m0, m1, entries); (s)%afs-cons-dir-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ dirs ∧ dirs[ino] = mkdir(n0, md, n, n1, entries) → # links(ino, dirs) = n; (forward) from specification afs-base% ⊦ 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)