def prove(Eq): A = Symbol.A(dtype=dtype.integer) B = Symbol.B(dtype=dtype.integer) Eq << apply(Equality(Intersection(A, B), S.EmptySet)) C = Symbol.C(dtype=dtype.integer, definition=A | B) D = Symbol.D(dtype=dtype.integer, definition=A - B) Eq << C.this.definition Eq << D.this.definition Eq << Eq[-1].union(A) Eq << Eq[-2].union(B) Eq << sets.equality.imply.equality.given.emptyset.complement.apply(Eq[0]) Eq << Eq[-1].abs() Eq << Eq[1].subs(Eq[-1].reversed) Eq << Eq[-1] - Eq[-1].rhs.args[0] Eq << (A - B).assertion()
def prove(Eq): A = Symbol.A(dtype=dtype.integer) B = Symbol.B(dtype=dtype.integer) Eq << apply(A, B) Eq << Equality(abs(A | B), abs(A) + abs(B - A), plausible=True) Eq << Eq[-1].subs(Eq[-2]) Eq << Eq[-1] - Eq[-1].lhs.args[1] C = Symbol.C(dtype=dtype.integer, definition=A & B) D = Symbol.D(dtype=dtype.integer, definition=B - A) Eq.C_definition = C.this.definition Eq.D_definition = D.this.definition Eq << Equality(D & C, S.EmptySet, plausible=True) Eq << Eq[-1].subs(Eq.C_definition, Eq.D_definition) Eq << sets.equality.imply.equality.given.intersection.addition_principle.apply( Eq[-1]) Eq << Eq[-1].subs(Eq.C_definition, Eq.D_definition) Eq << Equality(D & A, S.EmptySet, plausible=True) Eq << Eq[-1].subs(Eq.D_definition) Eq << sets.equality.imply.equality.given.intersection.addition_principle.apply( Eq[-1]) Eq << Eq[-1].subs(Eq.D_definition)