| boolvar ↔ boolvar0, key = inodekey(m), ri = ri1 \ datakeys(inodekey(m), ri1), ro = ro0 -- inodekey(m), fo.inodes?, ro0.inodes?, file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, ri1, ro0), replay-cons-strong(fs, ri1, ro0, fi, fo, log), ri-inj(fi), ri-inj(ri1), ubifs-cons(fs, ri1, ro0, fi, fo, log), inodekey(m) ∈ ri1, inodekey(m) ∈ ro0, ∀ ino. inodekey(ino) ∈ ro0 → links(ino, fs, ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro0 → dentrykeys(inodekey(ino), ri1) = ∅ ⊦ ⟪err := ESUCCESS⟫ ( ubifs-cons(fs, ri -- key, ro0 -- inodekey(m), fi, fo, log) ∧ replay-cons-strong(fs, ri -- key, ro0 -- inodekey(m), fi, fo, log) ∧ file-node-cons(fs, ri -- key) ∧ orphans-cons(fs, ri -- key, ro0 -- inodekey(m))), # ro0 = 0, m = ROOT_INO, ro0 = ∅ |
# ro0 ≠ 0, m ≠ ROOT_INO, ro0 ≠ ∅, ro0.inodes?, fo.inodes?, file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, ri1, ro0), replay-cons-strong(fs, ri1, ro0, fi, fo, log), ri-inj(ri1), ri-inj(fi), ubifs-cons(fs, ri1, ro0, fi, fo, log), inodekey(m) ∈ ro0, inodekey(m) ∈ ri1, ∀ ino. inodekey(ino) ∈ ro0 → dentrykeys(inodekey(ino), ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro0 → links(ino, fs, ri1) = ∅ ⊦ ⟪err := ESUCCESS⟫ ( ubifs-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m), fi, fo, log) ∧ replay-cons-strong(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m), fi, fo, log) ∧ file-node-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) ∧ orphans-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m)))
Used simplifier rules: size-zero-01: ⊦ ks ≠ ∅ → # ks ≠ 0; (forward) from specification set-basic[node-index]%ne-01: ⊦ key ∈ ks → ks ≠ ∅; (forward) from specification set-basic[node-index]