| replay-log(log, fs, fi ⊖ fo) = ri1 ⊖ ro0, 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-safe(log, fs, fi ⊖ fo), 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, (ri1 ⊖ ro0)[key] = ( (((ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) \ (ro0 -- inodekey(m))) \ datakeys(ro0 -- inodekey(m), (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) )[key ], m = ROOT_INO, ro0 = ∅, key ∈ ri1 ∧ ¬ key ∈ ro0 ∧ ¬ key.data? |
replay-log(log, fs, fi ⊖ fo) = ri1 ⊖ ro0, ro0.inodes?, fo.inodes?, file-node-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), file-node-cons(fs, ri1), log-cons(log, fs), orphans-cons(fs, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m), ro0 -- inodekey(m)), orphans-cons(fs, ri1, ro0), replay-safe(log, fs, fi ⊖ fo), 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) = ∅ ⊦ # ro0 = 0, (ri1 ⊖ ro0)[key] = (inodekey(m) = key ⊃ (∅)[inodekey(m)] ;( key ∈ datakeys(ro0, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) \ datakeys(inodekey(m), (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) ⊃ (∅)[key] ;(key ∈ ro0 ⊃ (∅)[key];(key ∈ ri1 ∧ key.data? ∧ key.ino = m ⊃ (∅)[key];ri1[key])) ) ), m = ROOT_INO, ro0 = ∅, key ∈ ri1 ∧ ¬ key ∈ ro0 ∧ ¬ key.data?
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]);% ⊦ inodekey(m).ino = m; (s)% ⊦ inodekey(m).inode?; (s)%⊦ key ∈ datakeys(key0, ri) ↔ key ∈ ri ∧ key.data? ∧ key0.inode? ∧ key.ino = key0.ino; (s)% ⊦ key ∈ ks -- key0 ↔ key ≠ key0 ∧ key ∈ ks; (s)% ⊦ datakeys(ks -- key, ri) = datakeys(ks, ri) \ datakeys(key, ri); (s)% ⊦ (ri -- key) \ ks = (ri \ ks) -- key; (s)