| (ino ∈ dirs ⊃ mkinode(ino, dirs[ino].meta, true, dirs[ino].nlink, dirs[ino].nsubdirs, dirs[ino].size) ;mkinode(ino, files[ino].meta, false, files[ino].nlink, 0, files[ino].size) ) = mkinode(m, md0, boolvar0, m4, m5, m6), icache[m] = mkientry(boolvar3, mkinode(m7, md1, boolvar2, m8, m9, m10)), afs-cons(dirs, files), synced(dirs, icache, pcache), m ∈ icache → m7 = m ∧ (boolvar3 ⊃ m ∈ files ∧ m8 = files[m].nlink ∧ m9 = 0 ∧ ¬ boolvar2 ; (m ∈ dirs ∨ m ∈ files) ∧ mkinode(m, md1, boolvar2, m8, m9, m10) = (m ∈ dirs ⊃ mkinode(m, dirs[m].meta, true, dirs[m].nlink, dirs[m].nsubdirs, dirs[m].size) ;mkinode(m, files[m].meta, false, files[m].nlink, 0, files[m].size) ) ), asynced2 → synced(files, icache, pcache), ∀ ino1. ino1 ∈ icache → icache[ino1].inode.ino = ino1 ∧ (icache[ino1].dirty ⊃ icache[ino1].inode.ino ∈ files ∧ icache[ino1].inode.nlink = files[icache[ino1].inode.ino].nlink ∧ icache[ino1].inode.nsubdirs = 0 ∧ ¬ icache[ino1].inode.directory ; (ino1 ∈ dirs ∨ ino1 ∈ files) ∧ icache[ino1].inode = (icache[ino1].inode.ino ∈ dirs ⊃ mkinode (icache[ino1].inode.ino, dirs[icache[ino1].inode.ino].meta, true, dirs[icache[ino1].inode.ino].nlink, dirs[icache[ino1].inode.ino].nsubdirs, dirs[icache[ino1].inode.ino].size) ;mkinode (icache[ino1].inode.ino, files[icache[ino1].inode.ino].meta, false, files[icache[ino1].inode.ino].nlink, 0, files[icache[ino1].inode.ino].size) ) ), ino ∈ dirs ∨ ino ∈ files ⊦ ino ∈ icache, (m ∈ dirs ∨ m ∈ files) ∧ mkinode(m, md0, boolvar0, m4, m5, m6) = (m ∈ dirs ⊃ mkinode(m, dirs[m].meta, true, dirs[m].nlink, dirs[m].nsubdirs, dirs[m].size) ;mkinode(m, files[m].meta, false, files[m].nlink, 0, files[m].size) ) |
Used simplifier rules: ⊦ mkinode(m, md, boolvar, m0, m1, m2) = mkinode(m3, md0, boolvar0, m4, m5, m6) ↔ m = m3 ∧ md = md0 ∧ (boolvar ↔ boolvar0) ∧ m0 = m4 ∧ m1 = m5 ∧ m2 = m6; (ws)% ⊦ ¬ ino ∈ icache → icache[ino] = (∅)[ino]; (s) Used formulas: ino ∈ dirs