| log-cons(log1, fs1), ri-closed(ri1, fs1, ro1), ri-cons(ri1, fs1), adr ∈ log1, fo1 ⊆ dom fi1, ro1 ⊆ dom ri1, adr ∈ log0 → adr ∈ fs0 ∧ (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?) ⊦ inodekey(0) ∈ ri1, (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?) |
⊦ log-cons(log, fs) ↔ (∀ adr. adr ∈ log → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr]))
ri-closed(ri1, fs1, ro1), ri-cons(ri1, fs1), adr ∈ log1, ro1 ⊆ dom ri1, fo1 ⊆ dom fi1, adr ∈ log0 → adr ∈ fs0 ∧ (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. adr ∈ log1 → adr ∈ fs1 ∧ node-cons(fs1[adr].key, fs1[adr]) ⊦ inodekey(0) ∈ ri1, (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?)
Used terms: fs1, log1