import proveit
from proveit import defaults
from proveit import PofA
from proveit.logic import PofTrue, PofFalse
from proveit.logic.booleans.disjunction import singular_constructive_dilemma
theory = proveit.Theory() # the theorem's theory
%proving forall_over_bool_by_cases
defaults.assumptions=forall_over_bool_by_cases.all_conditions()
Ain_bool=defaults.assumptions[2]
ATRUEorFALSE=Ain_bool.unfold()
AequalTRUE, AequalFALSE=ATRUEorFALSE.operands
AequalTRUE.sub_left_side_into(PofTrue, assumptions=defaults.assumptions + (AequalTRUE,))
AequalFALSE.sub_left_side_into(PofFalse, assumptions=defaults.assumptions + (AequalFALSE,))
ATRUEorFALSE.derive_via_dilemma(PofA)
%qed