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)