| boolvar ↔ boolvar0, key = inodekey(m), ri = ri1 \ datakeys(inodekey(m), ri1), ri0 = ri1 \ datakeys(inodekey(m), ri1), ro.inodes?, fo.inodes?, file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, ri1, ro), replay-cons-strong(fs, ri1, ro, fi, fo, log), ri-inj(ri1), ri-inj(fi), ubifs-cons(fs, ri1, ro, fi, fo, log), inodekey(m) ∈ ro, inodekey(m) ∈ ri1, ∀ ino. inodekey(ino) ∈ ro → dentrykeys(inodekey(ino), ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro → links(ino, fs, ri1) = ∅ ⊦ ⟪aubifs_core_index_remove#(inodekey(m), fi, ro -- key, fo, fs, log, boolvar0; ri0); err := ESUCCESS⟫ ( ubifs-cons(fs, ri0, ro -- key, fi, fo, log) ∧ replay-cons-strong(fs, ri0, ro -- key, fi, fo, log) ∧ file-node-cons(fs, ri0) ∧ orphans-cons(fs, ri0, ro -- key)), # ro = 0, m = ROOT_INO, ro = ∅ |
ri = ri1 \ datakeys(inodekey(m), ri1), # ro ≠ 0, m ≠ ROOT_INO, ro ≠ ∅, fo.inodes?, ro.inodes?, file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, ri1, ro), replay-cons-strong(fs, ri1, ro, fi, fo, log), ri-inj(fi), ri-inj(ri1), ubifs-cons(fs, ri1, ro, fi, fo, log), inodekey(m) ∈ ri1, inodekey(m) ∈ ro, ∀ ino. inodekey(ino) ∈ ro → links(ino, fs, ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro → dentrykeys(inodekey(ino), ri1) = ∅ ⊦ ⟪aubifs_core_index_remove#(inodekey(m), fi, ro -- inodekey(m), fo, fs, log, boolvar0; ri); err := ESUCCESS⟫ ( ubifs-cons(fs, ri, ro -- inodekey(m), fi, fo, log) ∧ replay-cons-strong(fs, ri, ro -- inodekey(m), fi, fo, log) ∧ file-node-cons(fs, ri) ∧ orphans-cons(fs, ri, ro -- inodekey(m)))