| icache[ino, mkientry(false, inode)][ino0] = mkientry(boolvar1, inode1), pcache[datakey(ino0, n)] = mkpentry(true, buf), icache[ino0] = mkientry(boolvar0, inode0), ino0 ∈ files, datakey(ino0, n) ∈ pcache, ino ∈ files → (∀ n. datakey(ino, n) ∈ pcache → ¬ pcache[datakey(ino, n)].dirty), ino0 ∈ icache[ino, mkientry(false, inode)] → ¬ boolvar1, ∀ ino0. ino0 ∈ files → (ino0 ∈ icache[ino, mkientry(false, inode)] → ¬ icache[ino, mkientry(false, inode)][ino0].dirty) ∧ (∀ n. datakey(ino0, n) ∈ pcache → ¬ pcache[datakey(ino0, n)].dirty), ∀ n. datakey(ino0, n) ∈ pcache → ¬ pcache[datakey(ino0, n)].dirty ⊦ ino0 = ino, ino ∈ icache |
pcache[datakey(ino0, n)] = mkpentry(true, buf), icache[ino0] = mkientry(boolvar0, inode0), datakey(ino0, n) ∈ pcache, ino0 ∈ files, ino ∈ files → (∀ n. datakey(ino, n) ∈ pcache → ¬ pcache[datakey(ino, n)].dirty), ino0 ∈ icache → ¬ boolvar0, ∀ n. datakey(ino0, n) ∈ pcache → ¬ pcache[datakey(ino0, n)].dirty, ∀ ino0. ino0 ∈ files → (ino0 ∈ icache[ino, mkientry(false, inode)] → ¬ icache[ino, mkientry(false, inode)][ino0].dirty) ∧ (∀ n. datakey(ino0, n) ∈ pcache → ¬ pcache[datakey(ino0, n)].dirty) ⊦ ino0 = ino, ino ∈ icache
Used simplifier rules: ⊦ mkientry(boolvar, inode) = mkientry(boolvar0, inode0) ↔ (boolvar ↔ boolvar0) ∧ inode = inode0; (ws)% ⊦ ino ≠ ino0 → (ino ∈ icache[ino0, ie] ↔ ino ∈ icache); (s)% ⊦ ino ≠ ino0 → icache[ino0, ie][ino] = icache[ino]; (s)