| (key0.data? ∧ inodekey(key0.ino) ∈ ks0 ⊃ (∅)[key0];(key0 ∈ ks0 ⊃ (∅)[key0];ri0[key0])) = (key0 ∈ ri1 ∧ key0.data? ∧ inodekey(key0.ino) ∈ ro1 ⊃ (∅)[key0];(key0 ∈ ro1 ⊃ (∅)[key0];ri1[key0])), ¬ key0 ∈ ks0 ∧ (¬ key0.data? ∨ ¬ inodekey(key0.ino) ∈ ks0) ↔ key0 ∈ ri1 ∧ ¬ key0 ∈ ro1 ∧ (¬ key0.data? ∨ ¬ inodekey(key0.ino) ∈ ro1), key0.data?, ro1.inodes?, ks0.inodes?, key0 ∈ ri0, key ∈ ks0, key ∈ ro1, ks0 ⊆ ro1, ∀ key1. (key1 ∈ ri0 ∧ ¬ key1 ∈ ks0 ∧ (¬ key1.data? ∨ ¬ inodekey(key1.ino) ∈ ks0) ↔ key1 ∈ ri1 ∧ ¬ key1 ∈ ro1 ∧ (¬ key1.data? ∨ ¬ inodekey(key1.ino) ∈ ro1)) ∧ (key1 ∈ ri0 ∧ key1.data? ∧ inodekey(key1.ino) ∈ ks0 ⊃ (∅)[key1];(key1 ∈ ks0 ⊃ (∅)[key1];ri0[key1])) = (key1 ∈ ri1 ∧ key1.data? ∧ inodekey(key1.ino) ∈ ro1 ⊃ (∅)[key1];(key1 ∈ ro1 ⊃ (∅)[key1];ri1[key1])) ⊦ # ks0 = 0, # ro1 = 0, ks0 = ∅, ro1 = ∅, ( ¬ key0 ∈ ks0 → ¬ key0.data? ∨ ¬ inodekey(key0.ino) ∈ ks0 → (¬ key0.data? ∨ ¬ key.inode? ∨ key0.ino ≠ key.ino) ∧ (key0.ino = key.ino ∨ ¬ key0.data? ∨ ¬ inodekey(key0.ino) ∈ ks0)) ∧ (key = key0 ⊃ (∅)[key0] ;((¬ key.inode? ∨ key0.ino ≠ key.ino) ∧ key0.data? ∧ inodekey(key0.ino) ∈ ks0 ⊃ (∅)[key0] ;(key0 ∈ ks0 ⊃ (∅)[key0];(key0.data? ∧ key0.ino = key.ino ⊃ (∅)[key0];ri0[key0])) ) ) = (key0.data? ∧ inodekey(key0.ino) ∈ ks0 ⊃ (∅)[key0];(key0 ∈ ks0 ⊃ (∅)[key0];ri0[key0])), ¬ key0 ∈ ks0 ∧ ¬ key0.data? |
(inodekey(ino) ∈ ks0 ⊃ (∅)[datakey(ino, n)];ri0[datakey(ino, n)]) = (datakey(ino, n) ∈ ri1 ∧ inodekey(ino) ∈ ro1 ⊃ (∅)[datakey(ino, n)];ri1[datakey(ino, n)]), ¬ inodekey(ino) ∈ ks0 ↔ datakey(ino, n) ∈ ri1 ∧ ¬ inodekey(ino) ∈ ro1, ro1.inodes?, ks0.inodes?, datakey(ino, n) ∈ ri0, key ∈ ks0, key ∈ ro1, ks0 ⊆ ro1, ∀ key1. (key1 ∈ ri0 ∧ ¬ key1 ∈ ks0 ∧ (¬ key1.data? ∨ ¬ inodekey(key1.ino) ∈ ks0) ↔ key1 ∈ ri1 ∧ ¬ key1 ∈ ro1 ∧ (¬ key1.data? ∨ ¬ inodekey(key1.ino) ∈ ro1)) ∧ (key1 ∈ ri0 ∧ key1.data? ∧ inodekey(key1.ino) ∈ ks0 ⊃ (∅)[key1];(key1 ∈ ks0 ⊃ (∅)[key1];ri0[key1])) = (key1 ∈ ri1 ∧ key1.data? ∧ inodekey(key1.ino) ∈ ro1 ⊃ (∅)[key1];(key1 ∈ ro1 ⊃ (∅)[key1];ri1[key1])) ⊦ # ks0 = 0, # ro1 = 0, (key = datakey(ino, n) ⊃ (∅)[datakey(ino, n)] ;((¬ key.inode? ∨ ino ≠ key.ino) ∧ inodekey(ino) ∈ ks0 ⊃ (∅)[datakey(ino, n)];(ino = key.ino ⊃ (∅)[datakey(key.ino, n)];ri0[datakey(ino, n)])) ) = (inodekey(ino) ∈ ks0 ⊃ (∅)[datakey(ino, n)];ri0[datakey(ino, n)]), ks0 = ∅, ro1 = ∅
Used simplifier rules: elim-data: ⊦ key.data? ↔ (∃ ino, n. key = datakey(ino, n));% ⊦ key.inode? → inodekey(key.ino) = key; (s)% ⊦ datakey(m, m0).data?; (s)% ⊦ ks.inodes? → ¬ datakey(ino, n) ∈ ks; (s)% ⊦ datakey(m, m0).ino = m; (s)