| # kx = # ax, as ∩ range ri0[kx, ax] = ∅, ax.toSet ∩ log0.toSet = ∅, as ∩ log0.toSet = ∅, as ∩ ax.toSet = ∅, ro.inodes?, fo.inodes?, log-cons(log0, fs0), new(ax, fs0), ri-cons(ri0, fs0), ri-inj(ri0), ri-inj(fi), kx.toSet ⊆ dom ri0 ⊦ dups(kx), dups(ax), log-cons(log0, fs0[ax, fs0[ri0[kx]]] \ as) ∧ log-cons(ax, fs0[ax, fs0[ri0[kx]]] \ as) ∧ ri-cons(ri0[kx, ax], fs0[ax, fs0[ri0[kx]]] \ as) |
⊦ log-cons(log, fs) ∧ log.toSet ∩ as = ∅ → log-cons(log, fs \ as)
# kx = # ax, as ∩ ax.toSet = ∅, as ∩ log0.toSet = ∅, ax.toSet ∩ log0.toSet = ∅, as ∩ range ri0[kx, ax] = ∅, ax.toSet ∩ as = ∅, fo.inodes?, ro.inodes?, log-cons(log0, fs0), log-cons(ax, fs0[ax, fs0[ri0[kx]]]), new(ax, fs0), ri-cons(ri0, fs0), ri-inj(fi), ri-inj(ri0), kx.toSet ⊆ dom ri0 ⊦ dups(ax), dups(kx), log-cons(log0, fs0[ax, fs0[ri0[kx]]] \ as) ∧ true ∧ ri-cons(ri0[kx, ax], fs0[ax, fs0[ri0[kx]]] \ as)
Used simplifier rules: # kx = # ax ⊦ kx.toSet ⊆ dom ri ∧ ri-cons(ri, fs) ∧ ¬ dups(kx) ∧ ¬ dups(ax) → log-cons(ax, fs[ax, fs[ri[kx]]]); (s)%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store] Used terms: as, fs0[ax, fs0[ri0[kx]]], ax