Mathematica 10.3 gets it wrong with this calculation
(A [Intersection] B) [Union] (A [Intersection] C)
It seems to work if we inactivate Union and Intersection:
Inactivate[
replRule := {HoldPattern[
x \[Element]
u_ \[Union] v_] :> (x \[Element] u) \[Or] (x \[Element] v),
HoldPattern[
x \[Element]
u_ \[Intersection] v_] :> (x \[Element] u) \[And] (x \[Element]
v)};
predicate1 =
x \[Element] (A \[Intersection] B) \[Union] (A \[Intersection] C);
predicate2 = x \[Element] A && (x \[Element] B || x \[Element] C);
Simplify[Equivalent[predicate1, predicate2] //. replRule],
Union | Intersection | C]