| ks1 = ks0, ri = ri2 -- key, ri2 = ri0 \ datakeys(key, ri0), ro = ks0, ro0 = ks0, ro2 = ks0, ri0 ⊖ ks0 = ri1 ⊖ ro1, ro1.inodes?, ks0.inodes?, key ∈ ks0, key ∈ ro1, ks0 ⊆ ro1 ⊦ # ks0 = 0, # ro1 = 0, ks0 = ∅, ro1 = ∅, ro0 -- key = ro -- key ∧ ro -- key ⊆ ro1 ∧ (ri2 -- key) ⊖ (ro -- key) = ri1 ⊖ ro1 ∧ (ro -- key).inodes? ∧ #(ro -- key) < # ks1 |
ri0 ⊖ ks0 = ri1 ⊖ ro1, ks0.inodes?, ro1.inodes?, key ∈ ro1, key ∈ ks0, ks0 ⊆ ro1 ⊦ # ro1 = 0, # ks0 = 0, ks0 = ∅, ro1 = ∅, ((ri0 \ datakeys(key, ri0)) -- key) ⊖ (ks0 -- key) = ri1 ⊖ ro1
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ key ∈ ks → #(ks -- key) = # ks - 1; (s)% ⊦ ks.inodes? → (ks -- key).inodes?; (ss)% ⊦ ks ⊆ ks0 → ks -- key ⊆ ks0; (s)