| # ax0 = # ax1, ri-cons(ri, fs), ax0.toSet ⊆ range ri ⊦ dom ri[keys(fs, ax0), ax1] = dom ri |
# ax0 = # ax1, ax0.toSet ⊆ range ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ keys(fs, ax0).toSet ⊆ dom ri
Used simplifier rules: ri-cons: ⊦ ri-cons(ri, fs) ↔ (∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]));%unc: ⊦ ks ∪ ks0 = ks0 ∪ ks; from specification set-union[node-index]%una: ⊦ (ks ∪ ks0) ∪ ks1 = ks ∪ ks0 ∪ ks1; from specification set-union[node-index]% ⊦ ks ∪ ks0 = ks0 ↔ ks ⊆ ks0; (s)%# kx = # ax ⊦ dom ri[kx, ax] = dom ri ∪ kx.toSet; (s)% ⊦ # keys(fs, ax) = # ax; (s)