| fs[ri[key]].key = key, as ∩ range ri = ∅, 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), ri[key] ∈ fs, key ∈ ri, (∅)[inodekey(key.ino)] ∈ as, key.inode? → fs[ri[key]].inode? ∧ key.ino ≠ 0 ⊦ # as = 0, as = ∅, key.data?, key.dentry?, inodekey(key.ino) ∈ ri, (fs \ as)[ri[key]].key = key ∧ (key.inode? → (fs \ as)[ri[key]].inode? ∧ key.ino ≠ 0) |
⊦ ¬ adr ∈ as → (fs \ as)[adr] = fs[adr]
Used simplifier rules: int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[node-store]%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store]% ⊦ key ∈ ri ∧ as ∩ range ri = ∅ → ¬ ri[key] ∈ as; (s) Used terms: ri[key], as, fs