import proveit
from proveit import A, B
from proveit.logic import Not, SetNotEquiv
from proveit.logic.sets import SetEquiv
from proveit.logic.sets.equivalence import set_equiv_def, set_not_equiv_def
from proveit.logic.sets.equivalence import set_equiv_reversal
theory = proveit.Theory() # the theorem's theory
%proving set_not_equiv_reversal
set_not_equiv_def
set_not_equiv_def_inst_AB = set_not_equiv_def.instantiate()
set_not_equiv_def_inst_BA = set_not_equiv_def.instantiate({A:B, B:A})
set_equiv_reversal
set_equiv_reversal_inst_BA = set_equiv_reversal.instantiate({A:B, B:A}, assumptions=[SetEquiv(B, A)])
set_equiv_reversal_inst_BA_as_implication = set_equiv_reversal_inst_BA.as_implication(hypothesis=SetEquiv(B, A))
not_AEquivB_gives_not_BEquivA = set_equiv_reversal_inst_BA_as_implication.deny_antecedent(assumptions=[Not(SetEquiv(A, B))])
not_AEquivB_gives_not_BEquivA_as_implication = not_AEquivB_gives_not_BEquivA.as_implication(hypothesis=Not(SetEquiv(A, B)))
c_1 = set_not_equiv_def_inst_AB.sub_left_side_into(not_AEquivB_gives_not_BEquivA_as_implication)
c_2 = set_not_equiv_def_inst_BA.sub_left_side_into(c_1)
%qed