| # ax = # kx0 + 1, ri[kx0 + key1 ', ax][key] = ri[kx0 + key1 ', ax][key0], ax.toSet ∩ range ri = ∅, ri-inj(ri), key ∈ ri[kx0 + key1 ', ax], key0 ∈ ri[kx0 + key1 ', ax], ∀ kx1, ax, ri, key, key0. # kx1 < #(kx0 + key1 ') → # ax = # kx1 ∧ ri[kx1, ax][key] = ri[kx1, ax][key0] ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ key ∈ ri[kx1, ax] ∧ key0 ∈ ri[kx1, ax] → key = key0 ∨ dups(ax) ∨ key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0] ⊦ key = key0, dups(ax), key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0] |
# ax = # kx0 + 1, ri[kx0 + key1 ', ax][key] = ri[kx0 + key1 ', ax][key0], ax.toSet ∩ range ri = ∅, ri-inj(ri), key0 ∈ ri[kx0 + key1 ', ax], key ∈ ri[kx0 + key1 ', ax], ∀ kx1, ax, ri, key, key0. # kx1 < #(kx0 + key1 ') → # ax = # kx1 ∧ ri[kx1, ax][key] = ri[kx1, ax][key0] ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ key ∈ ri[kx1, ax] ∧ key0 ∈ ri[kx1, ax] → key = key0 ∨ dups(ax) ∨ key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0] ⊦ ax = [], key = key0, dups(ax), key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0]
Used simplifier rules: ⊦ [].toSet = ∅; (s)% ⊦ as ∩ ∅ = ∅; (s)%int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[node-store]%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store]% ⊦ # [] = 0; (s)% ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws)% ⊦ # kx = 0 ↔ kx = []; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic Used formulas: ax = []