| fs1[ri1[inodekey(pageno)]].key = inodekey(pageno), fs1[ri1[inodekey(pageno)]].inode?, log-cons(log1, fs1), ubifs-cons(fs0, ri0, ro0, fi0, fo0, log0), inodekey(pageno) ∈ ri1, ri1[inodekey(pageno)] ∈ fs1, 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]]) ⊦ inodekey(0) ∈ ri1, ( fs1[ri1[inodekey(pageno)]].dentry? → ¬ inodekey(pageno) ∈ ro1 ∧ fs1[ri1[inodekey(pageno)]].directory ∧ inodekey(fs1[ri1[inodekey(pageno)]].ino) ∈ ri1 ∧ ¬ inodekey(fs1[ri1[inodekey(pageno)]].ino) ∈ ro1) ∧ (fs1[ri1[inodekey(pageno)]].data? → ¬ fs1[ri1[inodekey(pageno)]].directory ∧ # fs1[ri1[inodekey(pageno)]].data = VFS_PAGE_SIZE) |
Used simplifier rules: ⊦ inodenode(key, md, boolvar, m, m0, m1).inode?; (s)% ⊦ ¬ inodenode(key, md, boolvar, m, m0, m1).dentry?; (s)% ⊦ ¬ inodenode(key, md, boolvar, m, m0, m1).data?; (s)%⊦ nd.inode? → ( ( ( ( (key = nd.key ∧ md = nd.meta) ∧ (boolvar ↔ nd.directory)) ∧ m = nd.nlink) ∧ m0 = nd.nsubdirs) ∧ m1 = nd.size ↔ nd = inodenode(key, md, boolvar, m, m0, m1)); (elim) Used terms: fs1[ri1[inodekey(pageno)]], key0, md, boolvar, m, m0, m1