| ri-cons(ri, fs), ri-cons(ri, fs) → fs[referenced-adrs(ax0, ri)].keys.toSet ⊆ dom ri ⊦ fs[(adr ∈ ri ⊃ adr ';[])].keys.toSet ∪ fs[referenced-adrs(ax0, ri)].keys.toSet ⊆ dom ri |
ri-cons(ri, fs), fs[referenced-adrs(ax0, ri)].keys.toSet ⊆ dom ri ⊦ fs[adr].key ∈ fs[referenced-adrs(ax0, ri)].keys, fs[(adr ∈ ri ⊃ adr ';[])].keys.toSet ⊆ dom ri
Used simplifier rules: keys-base-01: ⊦ [].keys = [];%keys-one: ⊦ nd '.keys = nd.key ';% ⊦ key ∈ kx.toSet ↔ key ∈ kx; (s)% ⊦ ∅ ++ key ⊆ ks ↔ key ∈ ks; (s)% ⊦ key '.toSet = ∅ ++ key; (s)% ⊦ fs[adr '] = fs[adr] '; (s)% ⊦ ∅ ⊆ ks; (s)% ⊦ [].toSet = ∅; (s)% ⊦ fs[[]] = []; (s)%sub-ntrans-01: ⊦ ks ⊆ ks0 ∧ ¬ ks1 ⊆ ks0 → ¬ ks1 ⊆ ks; (forward) from specification set-basic[node-index]%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 ⊆ ks1 ↔ ks ⊆ ks1 ∧ ks0 ⊆ ks1; (ws)