| rs1 ∩ rs0 = ∅, a[P](mk(rs1, f(r; o), g)) ⊦ g(r) = a, (a[P] * true)[rs1 ∪ rs0, f, g], a[P](mk(rs1, f, g)), ∀ r0. (r0 ∈ mk(rs1, f(r; o), g) ↔ r0 ∈ mk(rs1, f, g)) ∧ (r0 ∈ mk(rs1, f(r; o), g) → mk(rs1, f(r; o), g)[r0]o = mk(rs1, f, g)[r0]o ∧ mk(rs1, f(r; o), g)[r0]a = mk(rs1, f, g)[r0]a) |
rs1 ∩ rs0 = ∅, a[P](mk(rs1, f(r; o), g)), r0 ∈ rs1 ⊦ # rs1 = 0, (r = r0 ⊃ o;f(r0)) = f(r0), g(r) = a, rs1 = ∅, (a[P] * true)[rs1 ∪ rs0, f, g], a[P](mk(rs1, f, g))
Used simplifier rules: size-zero-01: ⊦ rs ≠ ∅ → # rs ≠ 0; (forward) from specification set-basic[refset]%ne-01: ⊦ r ∈ rs → rs ≠ ∅; (forward) from specification set-basic[refset]% ⊦ r ∈ rs → mk(rs, f, g)[r]a = g(r); (s)% ⊦ r ∈ rs → mk(rs, f, g)[r]o = f(r); (s)% ⊦ r ∈ mk(rs, f, g) ↔ r ∈ rs; (s)