| replay-log(log, fs, fi ⊖ fo) = (ri1 \ ro0) \ datakeys(ro0, ri1), 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(ino) ∈ ri1, inodekey(m) ∈ ri1, inodekey(m) ∈ ro0, datakey(ino, n) ∈ ri1, inodekey(ino) ∈ ro0, ∀ ino. inodekey(ino) ∈ ro0 → links(ino, fs, ri1) = ∅, ∀ ino. inodekey(ino) ∈ ro0 → dentrykeys(inodekey(ino), ri1) = ∅ ⊦ # ro0 = 0, (∅)[datakey(ino, n)] = ri1[datakey(ino, n)], ino = m, m = ROOT_INO, ro0 = ∅, fs[ri1[inodekey(ino)]].directory, datakey(ino, n) ∈ datakeys(ro0, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) \ datakeys(inodekey(m), (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)) |
⊦ key ∈ ks \ ks0 ↔ key ∈ ks ∧ ¬ key ∈ ks0
Used simplifier rules: ⊦ key ∈ datakeys(ks, ri) ↔ key ∈ ri ∧ key.data? ∧ inodekey(key.ino) ∈ ks; (s)% ⊦ key ∈ ri -- key0 ↔ key ≠ key0 ∧ key ∈ ri; (s)% ⊦ inodekey(m) ≠ datakey(m0, m1); (s)% ⊦ key ∈ ri \ ks ↔ key ∈ ri ∧ ¬ key ∈ ks; (ls)%⊦ key ∈ datakeys(key0, ri) ↔ key ∈ ri ∧ key.data? ∧ key0.inode? ∧ key.ino = key0.ino; (s)% ⊦ datakey(m, m0).data?; (s)% ⊦ inodekey(m).inode?; (s)% ⊦ datakey(m, m0).ino = m; (s)% ⊦ inodekey(m).ino = m; (s) Used terms: datakeys (inodekey(m), (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), datakeys(ro0, (ri1 \ datakeys(inodekey(m), ri1)) -- inodekey(m)), datakey(ino, n)