| dirs[m] = mkdir(m0, md0, # links(m, dirs), m2, entries), icache[m] = mkientry(boolvar, mkinode(m1, md1, boolvar0, m3, m4, m5)), afs-cons(dirs, files), afs-cons(dirs[m, mkdir(m0, md, # links(m, dirs), m2, entries)], files), synced(files, icache, pcache), ino ∈ files, m ∈ dirs, m ∈ icache, ino ∈ icache → ¬ icache[ino].dirty, ∀ n. datakey(ino, n) ∈ pcache → ¬ pcache[datakey(ino, n)].dirty ⊦ ( ino ∈ icache[m1, mkientry(false, mkinode(m1, md, boolvar0, m3, m4, m5))] → ¬ icache[m1, mkientry(false, mkinode(m1, md, boolvar0, m3, m4, m5))][ino].dirty) ∧ (datakey(ino, n) ∈ pcache → ¬ pcache[datakey(ino, n)].dirty) |
icache[m] = mkientry(boolvar, mkinode(m1, md1, boolvar0, m3, m4, m5)), dirs[m] = mkdir(m0, md0, # links(m, dirs), m2, entries), pcache[datakey(ino, n)] = mkpentry(boolvar1, buf), afs-cons(dirs[m, mkdir(m0, md, # links(m, dirs), m2, entries)], files), afs-cons(dirs, files), synced(files, icache, pcache), m ∈ icache, m ∈ dirs, ino ∈ files, ino ∈ icache → ¬ icache[ino].dirty, ∀ n. datakey(ino, n) ∈ pcache → ¬ pcache[datakey(ino, n)].dirty ⊦ ( ino ∈ icache[m1, mkientry(false, mkinode(m1, md, boolvar0, m3, m4, m5))] → ¬ icache[m1, mkientry(false, mkinode(m1, md, boolvar0, m3, m4, m5))][ino].dirty) ∧ (datakey(ino, n) ∈ pcache → ¬ boolvar1)
Used simplifier rules: ⊦ (boolvar ↔ pe.dirty) ∧ buf = pe.page ↔ pe = mkpentry(boolvar, buf); (elim) Used terms: pcache[datakey(ino, n)], boolvar1, buf