| # fs1[ri1[datakey(pageno, pageno0)]].data = VFS_PAGE_SIZE, fs1[ri1[datakey(pageno, pageno0)]].key = datakey(pageno, pageno0), fs1[ri1[datakey(pageno, pageno0)]].data?, fs1[ri1[datakey(pageno, pageno0)]].dentry?, log-cons(log1, fs1), ubifs-cons(fs0, ri0, ro0, fi0, fo0, log0), datakey(pageno, pageno0) ∈ ri1, ri1[datakey(pageno, pageno0)] ∈ fs1, inodekey(pageno) ∈ ri1, fo1 ⊆ dom fi1, ro1 ⊆ dom ri1, ∀ adr. ( adr ∈ log0 → (fs0[adr].inode? → fs0[adr].key.inode? ∧ fs0[adr].key.ino ≠ 0) ∧ (fs0[adr].dentry? → fs0[adr].key.dentry?) ∧ (fs0[adr].data? → fs0[adr].key.data?) ∧ (fs0[adr].trunc? → fs0[adr].key.inode?)) → adr ∈ log1 → adr ∈ fs1 ∧ (fs1[adr].inode? → fs1[adr].key.inode? ∧ fs1[adr].key.ino ≠ 0) ∧ (fs1[adr].dentry? → fs1[adr].key.dentry?) ∧ (fs1[adr].data? → fs1[adr].key.data?) ∧ (fs1[adr].trunc? → fs1[adr].key.inode?), ∀ key. key ∈ fo1 → key ∈ fi1, ∀ key. key ∈ ro1 → key ∈ ri1, ∀ key. key ∈ ri1 → ri1[key] ∈ fs1 ∧ key-cons(key, fs1[ri1[key]]) ⊦ fs1[ri1[inodekey(pageno)]].directory, inodekey(0) ∈ ri1 |
Used simplifier rules: ⊦ datanode(key, buf).data?; (s)% ⊦ ¬ datanode(key, buf).dentry?; (s)% ⊦ nd.data? → (key = nd.key ∧ buf = nd.data ↔ nd = datanode(key, buf)); (elim) Used terms: fs1[ri1[datakey(pageno, pageno0)]], key0, buf