| # ax1 = # ax0, # keys(fs, ax1) = # ax0, adr ∈ ri, ax1.toSet ⊆ range ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]), ∀ ax, ri, fs, key. # ax0 = # ax ∧ ax1.toSet ⊆ range ri ∧ (∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]])) → (key ∈ ri[keys(fs, ax1), ax] ↔ key ∈ ri) ⊦ key ∈ ri[fs[adr].key, adr0] ∨ key ∈ keys(fs, ax1) ↔ key ∈ ri |
# ax1 = # ax0, adr ∈ ri, ax1.toSet ⊆ range ri, ∀ ax, ri, fs, key. # ax0 = # ax ∧ ax1.toSet ⊆ range ri ∧ (∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]])) → (key ∈ ri[keys(fs, ax1), ax] ↔ key ∈ ri), ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ key ∈ ri[fs[adr].key, adr0] ∨ key ∈ keys(fs, ax1) ↔ key ∈ ri
Used simplifier rules: ⊦ # keys(fs, ax) = # ax; (s)