| boolvar ↔ boolvar0, fs[adr] = dentrynode(dentrykey(ino, str), m), key = dentrykey(ino, str), ri0 = ri, adr ∈ fs ⊦ ⟪if ¬ adr ∈ ri ∧ adr ∈ fs ∧ key-cons(key, fs[adr]) then ri[key] := adr else abort; 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))), m = 0, adr ∈ ri |
boolvar ↔ boolvar0, fs[adr] = dentrynode(dentrykey(ino, str), m), key = dentrykey(ino, str), ri0 = ri, adr ∈ fs ⊦ ⟪ri[key] := adr; 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))), m = 0, adr ∈ ri
Used simplifier rules: ⊦ key-cons(dentrykey(ino, str), nd) ↔ nd.dentry? ∧ nd.key = dentrykey(ino, str); (s)% ⊦ dentrynode(key, m).dentry?; (s)% ⊦ dentrynode(key, m).key = key; (s)