| # ax = # kx, ri[kx, ax][key] = ri[kx, ax][key0], ax.toSet ∩ range ri = ∅, ri-inj(ri), key0 ∈ ri[kx, ax], key ∈ ri[kx, ax], ∀ kx0, ax, ri, key, key0. # kx0 < # kx → # ax = # kx0 ∧ ri[kx0, ax][key] = ri[kx0, ax][key0] ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ key ∈ ri[kx0, ax] ∧ key0 ∈ ri[kx0, ax] → key = key0 ∨ dups(ax) ∨ key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0] ⊦ key = key0, dups(ax), ∀ kx0, key. kx ≠ kx0 + key ', 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), 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]
Used simplifier rules: a: ⊦ (kx + kx0) + kx1 = kx + kx0 + kx1; from specification list[key-list-set]% ⊦ # key ' = 0 +1; (s)% ⊦ #(kx + kx0) = # kx + # kx0; (s)