| ⊦ #(s0 ∪ s1) = # s0 + # s1 - #(s0 ∩ s1) |
∀ s0. #(s0 ∪ s) = # s0 + # s - #(s0 ∩ s) ⊦ #(s0 ∪ (s ++ a)) = # s0 + #(s ++ a) - #(s0 ∩ (s ++ a))
Used simplifier rules: une: ⊦ s ∪ ∅ = s;%una: ⊦ (s ∪ s0) ∪ s1 = s ∪ s0 ∪ s1;%unc: ⊦ s ∪ s0 = s0 ∪ s;%int-e: ⊦ s ∩ ∅ = ∅;%int-a: ⊦ (s ∩ s0) ∩ s1 = s ∩ s0 ∩ s1;%int-c: ⊦ s ∩ s0 = s0 ∩ s;%set generated by ∅, ++;;% ⊦ # ∅ = 0; (s)% ⊦ 0 + m = m; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m - 0 = m; (s)