import proveit
from proveit import defaults
from proveit import A, B
from proveit.logic import Equals, TRUE, FALSE
from proveit.logic.booleans.implication import Implies
from proveit.logic.booleans.implication import not_true_via_contradiction
from proveit.logic.booleans.negation import Not
theory = proveit.Theory() # the theorem's theory
%proving negated_reflex
defaults.assumptions = negated_reflex.all_conditions()
BeqT = Equals(B,TRUE)
AimplBeqT = BeqT.prove(assumptions=[BeqT]).as_implication(A)
n_impl_a_b = Not(Implies(A,B))
AimplB = n_impl_a_b.operands[0]
n_impl_a_b.evaluation()
contradiction = n_impl_a_b.derive_contradiction(assumptions=[B, Not(Implies(A,B))])
B_impl_F = contradiction.as_implication(B)
B_impl_F.derive_via_contradiction()
Implies(B, A).prove()
%qed