| zh[r2] = mkznode(r3, zbrar1, boolvar, true, m1), zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, boolvar2, m0), zbrar[n0] = mkzbranch(key, adr, r2), n0 < m, r2 ∈ zh, r ∈ zh, n0 ≤ n, n < m ∧ zbrar[n].branch? ∧ zbrar[n].child ∈ zh → ¬ boolvar2, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦ |
Used simplifier rules: ⊦ mkzbranch(key, adr, r).branch?; (s)% ⊦ mkzbranch(key, adr, r).child = r; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).dirty ↔ boolvar0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ m ≤ m; (s)%⊦ mkznode(r, zbrar, boolvar, boolvar0, m) = mkznode(r0, zbrar0, boolvar1, boolvar2, m0) ↔ r = r0 ∧ zbrar = zbrar0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2) ∧ m = m0; (ws) Used terms: n0