| ri[key] ∈ fs, key ∈ ri, fs[ri[key]].data? → inodekey(fs[ri[key]].key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(fs[ri[key]].key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE, fs[ri[key]].dentry? → inodekey(fs[ri[key]].key.ino) ∈ ri ∧ ¬ inodekey(fs[ri[key]].key.ino) ∈ ro ∧ fs[ri[inodekey(fs[ri[key]].key.ino)]].directory ∧ inodekey(fs[ri[key]].ino) ∈ ri ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ ri[key, adr][inodekey(fs[ri[key]].key.ino)] = adr, adr ∈ fs, ( fs[ri[key]].dentry? → inodekey(fs[ri[key]].key.ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key]].key.ino) ∈ ro ∧ fs[ri[key, adr][inodekey(fs[ri[key]].key.ino)]].directory ∧ inodekey(fs[ri[key]].ino) ∈ ri[key, adr] ∧ ¬ inodekey(fs[ri[key]].ino) ∈ ro) ∧ ( fs[ri[key]].data? → inodekey(fs[ri[key]].key.ino) ∈ ri[key, adr] ∧ ¬ fs[ri[key, adr][inodekey(fs[ri[key]].key.ino)]].directory ∧ # fs[ri[key]].data = VFS_PAGE_SIZE) |
Used simplifier rules: ⊦ key ≠ key0 → ri[key0, adr][key] = ri[key]; (s)% ⊦ key ≠ key0 → (key ∈ ri[key0, adr] ↔ key ∈ ri); (s)% ⊦ key ∈ ri[key0, adr] ↔ key = key0 ∨ key ∈ ri; (ws)% ⊦ key = key0 → ri[key0, adr][key] = adr; (s) Used formulas: inodekey(fs[ri[key]].key.ino) = key