| boolvar ↔ boolvar0, fs[adr] = datanode(key, buf), fs[adr].data?, node-cons(key, fs[adr]), adr ∈ fs ⊦ ⟪aubifs_core_index_contains#(inodekey(key.ino), ri, fi, ro, fo, fs, log, boolvar0; boolvar; err); ri0 := ri; nd := fs[adr]; 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].dentry?, fs[adr].inode?, adr ∈ ri |
boolvar ↔ boolvar0, fs[adr] = datanode(datakey(ino, n), buf), adr ∈ fs, ¬ adr ∈ ri ⊦ ⟪aubifs_core_index_contains#(inodekey(ino), ri, fi, ro, fo, fs, log, boolvar0; boolvar; err); ri0 := ri; nd := fs[adr]; 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)))
Used simplifier rules: elim-data: ⊦ key.data? ↔ (∃ ino, n. key = datakey(ino, n));% ⊦ datakey(m, m0).ino = m; (s)% ⊦ ¬ datanode(key, buf).inode?; (s)% ⊦ ¬ datanode(key, buf).dentry?; (s)% ⊦ node-cons(key0, datanode(key1, buf)) ↔ key0.data?; (s)% ⊦ datanode(key, buf).data?; (s)