| fs[adr].ino = 0, ri0 = ri, fs[adr].dentry?, node-cons(fs[adr].key, fs[adr]), adr ∈ fs, ¬ fs[adr].inode?, ¬ adr ∈ ri ⊦ ⟪aubifs_core_index_remove#(fs[adr].key, fi, ro, fo, fs, log, boolvar0; ri); nd := fs[adr]; err := ESUCCESS; boolvar := boolvar0; if nd.data? then {let key = inodekey(nd.key.ino) in aubifs_core_index_contains#(key, ri, fi, ro, fo, fs, log, boolvar0; boolvar; err); if err = ESUCCESS ∧ boolvar then aubifs_core_index_store#(nd.key, adr, fi, ro, fo, fs, log, boolvar0; ri)}; if nd.trunc? then aubifs_core_index_truncate#(nd.key, nd.size, fi, ro, fo, fs, log, boolvar0; ri)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri = replay-one(adr, fs[adr], ri0))) |
fs[adr] = dentrynode(key0, m), m = 0, ri0 = ri, fs[adr].dentry?, node-cons(key0, fs[adr]), adr ∈ fs ⊦ ⟪aubifs_core_index_remove#(key0, fi, ro, fo, fs, log, boolvar0; ri); nd := fs[adr]; err := ESUCCESS; boolvar := boolvar0; if nd.data? then {let key = inodekey(nd.key.ino) in aubifs_core_index_contains#(key, ri, fi, ro, fo, fs, log, boolvar0; boolvar; err); if err = ESUCCESS ∧ boolvar then aubifs_core_index_store#(nd.key, adr, fi, ro, fo, fs, log, boolvar0; ri)}; if nd.trunc? then aubifs_core_index_truncate#(nd.key, nd.size, fi, ro, fo, fs, log, boolvar0; ri)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri = replay-one(adr, fs[adr], ri0))), fs[adr].inode?, adr ∈ ri
Used simplifier rules: ⊦ nd.dentry? → (key = nd.key ∧ m = nd.ino ↔ nd = dentrynode(key, m)); (elim) Used terms: fs[adr], key0, m