| zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, false, m0), zh[r] = mkznode(r0, zbrar, boolvar, boolvar0, m), n < # zbrar, r ∈ zh, ¬ boolvar → (∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty) ⊦ r ∈ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)] ∧ ( ¬ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)][r].leaf → (∀ n0. n0 < zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)][r].usedsize ∧ n0 < n + 1 ∧ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)][r].zbranches[n0].branch? ∧ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)][r].zbranches[n0].child ∈ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)] → ¬ zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)] [zh[r, mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], boolvar, boolvar0, m)][r].zbranches[n0].child ] .dirty)) |
zh[zbrar[n].child] = mkznode(r1, zbrar0, boolvar1, false, m0), zh[r] = mkznode(r0, zbrar, false, boolvar0, m), zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].branch?, (zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child = r ⊃ mkznode(r0, zbrar[n, mkzbranch(key, adr, zbrar[n].child)], false, boolvar0, m) ;zh[zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child] ) .dirty, n0 < # zbrar, n0 < m, n < # zbrar, zbrar[n, mkzbranch(key, adr, zbrar[n].child)][n0].child ∈ zh, r ∈ zh, n0 ≤ n, ∀ n0. n0 < m ∧ n0 < n ∧ zbrar[n0].branch? ∧ zbrar[n0].child ∈ zh → ¬ zh[zbrar[n0].child].dirty ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).zbranches = zbrar; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).usedsize = m; (s)% ⊦ mkznode(r, zbrar, boolvar, boolvar0, m).leaf ↔ boolvar; (s)% ⊦ zh[r0, znd][r] = (r = r0 ∧ r0 ∈ zh ⊃ znd;zh[r]); (s)% ⊦ r ∈ zh[r0, znd] ↔ r ∈ zh; (s)