| 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) = ∅ ⊦ # ro0 = 0, m = ROOT_INO, ro0 = ∅, 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)) |
fo.inodes?, ro0.inodes?, file-node-cons(fs, ri1), file-node-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), log-cons(log, fs), orphans-cons(fs, ri1, ro0), orphans-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m)), 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) = ∅ ⊦ # ro0 = 0, m = ROOT_INO, ro0 = ∅, replay-cons-strong(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m), fi, fo, log) ∧ ubifs-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m), fi, fo, log)
Used simplifier rules: at-del-ri: ⊦ (ri -- key0)[key1] = (key0 = key1 ⊃ (∅)[key0];ri[key1]);%at-diff-ri: ⊦ (ri \ ks)[key] = (key ∈ ks ⊃ (∅)[key];ri[key]);% ⊦ key ∈ ks -- key0 ↔ key ≠ key0 ∧ key ∈ ks; (s)%⊦ orphans-cons(fs, ri, ro) → ( orphans-cons(fs0, ri0, ro0) ↔ (∀ ino. ( inodekey(ino) ∈ ri → ( fs[ri[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO ↔ inodekey(ino) ∈ ro)) → inodekey(ino) ∈ ri0 → ( fs0[ri0[inodekey(ino)]].nlink = 0 ∧ ino ≠ ROOT_INO ↔ inodekey(ino) ∈ ro0))); (ss)% ⊦ ¬ inodekey(m).data?; (s)%⊦ key ∈ datakeys(key0, ri) ↔ key ∈ ri ∧ key.data? ∧ key0.inode? ∧ key.ino = key0.ino; (s)% ⊦ key ∈ ri \ ks ↔ key ∈ ri ∧ ¬ key ∈ ks; (ls)% ⊦ inodekey(m) = inodekey(m0) ↔ m = m0; (s)% ⊦ key ∈ ri -- key0 ↔ key ≠ key0 ∧ key ∈ ri; (s)%⊦ file-node-cons(fs, ri) → ( file-node-cons(fs0, ri0) ↔ (∀ ino. ( inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory → fs[ri[inodekey(ino)]].nsubdirs = 0) → inodekey(ino) ∈ ri0 ∧ ¬ fs0[ri0[inodekey(ino)]].directory → fs0[ri0[inodekey(ino)]].nsubdirs = 0)); (ss)