| dups(log + ax), new(ax, fs), ∀ adr. adr ∈ log → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr]) ⊦ dups(ax), dups(log) |
dups((adr + log0) + ax), new(ax, fs), ∀ adr0. adr0 ∈ adr + log0 → adr0 ∈ fs ∧ node-cons(fs[adr0].key, fs[adr0]), ∀ ax, fs. dups(log0 + ax) ∧ new(ax, fs) ∧ (∀ adr. adr ∈ log0 → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr])) → dups(ax) ∨ dups(log0) ⊦ dups(adr + log0), dups(ax)
Used simplifier rules: address-list freely generated by [], +;;% ⊦ [] + ax = ax; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ ¬ dups([]); (s)% ⊦ ¬ adr ∈ []; (s)