| ⟨T4 := T2, T3 := T1⟩ ⟨while ¬ found?0 do {if T3[h1(a)] = empty then {T3 := T3[h1(a), full(a)]; found?0 := true}; if ¬ found?0 then {a := T3[h1(a)].elem, T3 := T3[h1(a), T3[h1(a)].elem:= a]; if T4[h2(a)] = empty then {T4 := T4[h2(a), full(a)]; found?0 := true}}; if ¬ found?0 then a := T4[h2(a)].elem, T4 := T4[h2(a), T4[h2(a)].elem:= a]}⟩ (T3 = T ∧ T4 = T0), ⟨lookup(a, T1, T2, h1, h2; found?)⟩ (found? ↔ found?0), inv(T1, h1), inv(T2, h2), disj(T1, T2), abs(T1, T2, h1, h2) ++ a ≠ abs(T, T0, h1, h2) ∨ ¬ inv(T, h1) ∨ ¬ inv(T0, h2) ∨ ¬ disj(T, T0), found? ↔ false ⊦ |
⟨while ¬ found?0 do {if T6[h1(a)] = empty then {T6 := T6[h1(a), full(a)]; found?0 := true}; if ¬ found?0 then {a := T6[h1(a)].elem, T6 := T6[h1(a), T6[h1(a)].elem:= a]; if T5[h2(a)] = empty then {T5 := T5[h2(a), full(a)]; found?0 := true}}; if ¬ found?0 then a := T5[h2(a)].elem, T5 := T5[h2(a), T5[h2(a)].elem:= a]}⟩ (T6 = T ∧ T5 = T0), ⟨lookup(a, T1, T2, h1, h2; found?)⟩ (found? ↔ found?0), inv(T1, h1), inv(T2, h2), disj(T1, T2), abs(T1, T2, h1, h2) ++ a ≠ abs(T, T0, h1, h2) ∨ ¬ inv(T, h1) ∨ ¬ inv(T0, h2) ∨ ¬ disj(T, T0), found? ↔ false, T5 = T2 ∧ T6 = T1 ⊦
[Concretesimprules(())]