| fs[ri[inodekey(m)]].directory, fo.inodes?, ro.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, ro, fi, fo, log), inodekey(m) ∈ ri, ∃ ino. ¬ inodekey(ino) ∈ dom ri ∪ fo ∪ {inodekey(0)} , fs[ri[inodekey(m)]].nlink ≠ 0 ∨ m = ROOT_INO ⊦ inodekey(m) ∈ ro, dentrykey(m, str) ∈ ri, ∃ n. ¬ inodekey(n) ∈ ri ∧ ¬ inodekey(n) ∈ fo ∧ n ≠ 0 |
fs[ri[inodekey(m)]].directory, ro.inodes?, fo.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, ro, fi, fo, log), inodekey(m) ∈ ri, fs[ri[inodekey(m)]].nlink ≠ 0 ∨ m = ROOT_INO ⊦ ino = 0, dentrykey(m, str) ∈ ri, inodekey(m) ∈ ro, inodekey(ino) ∈ ri, inodekey(ino) ∈ fo, ∃ n. ¬ inodekey(n) ∈ ri ∧ ¬ inodekey(n) ∈ fo ∧ n ≠ 0
Used simplifier rules: ⊦ key ∈ dom ri ↔ key ∈ ri; (s)% ⊦ key ∈ ks ∪ ks0 ↔ ¬(¬ key ∈ ks ∧ ¬ key ∈ ks0); (ss)% ⊦ inodekey(m) = inodekey(m0) ↔ m = m0; (s)% ⊦ key ∈ ks ++ key0 ↔ ¬(key ≠ key0 ∧ ¬ key ∈ ks); (ss)%unc: ⊦ ks ∪ ks0 = ks0 ∪ ks; from specification set-union[node-index]%una: ⊦ (ks ∪ ks0) ∪ ks1 = ks ∪ ks0 ∪ ks1; from specification set-union[node-index]% ⊦ ks ∪ ∅ = ks; (s)% ⊦ (ks ++ key) ∪ ks0 = (ks ∪ ks0) ++ key; (s)% ⊦ {key} = ∅ ++ key; (s)