logo
In [1]:
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
In [2]:
%proving forall_over_bool_by_cases
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
forall_over_bool_by_cases:
(see dependencies)
In [3]:
defaults.assumptions=forall_over_bool_by_cases.all_conditions()
defaults.assumptions:
In [4]:
Ain_bool=defaults.assumptions[2]
Ain_bool:
In [5]:
ATRUEorFALSE=Ain_bool.unfold()
ATRUEorFALSE:  ⊢  
In [6]:
AequalTRUE, AequalFALSE=ATRUEorFALSE.operands
AequalTRUE:
AequalFALSE:
In [7]:
AequalTRUE.sub_left_side_into(PofTrue, assumptions=defaults.assumptions + (AequalTRUE,))
In [8]:
AequalFALSE.sub_left_side_into(PofFalse, assumptions=defaults.assumptions + (AequalFALSE,))
In [9]:
ATRUEorFALSE.derive_via_dilemma(PofA)
, ,  ⊢  
forall_over_bool_by_cases may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [10]:
%qed
proveit.logic.booleans.forall_over_bool_by_cases has been proven.
Out[10]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3, 4, 13, 5, 6, ,  ⊢  
  : , : , :
2conjecture  ⊢  
 proveit.logic.booleans.disjunction.singular_constructive_dilemma
3instantiation7, 9  ⊢  
  : , :
4instantiation8, 9  ⊢  
  : , :
5deduction10  ⊢  
6deduction11  ⊢  
7axiom  ⊢  
 proveit.logic.booleans.disjunction.left_in_bool
8axiom  ⊢  
 proveit.logic.booleans.disjunction.right_in_bool
9instantiation12, 13  ⊢  
  :
10instantiation16, 14, 15,  ⊢  
  : , : , :
11instantiation16, 17, 18,  ⊢  
  : , : , :
12conjecture  ⊢  
 proveit.logic.booleans.in_bool_if_true
13instantiation19, 20  ⊢  
  :
14assumption  ⊢  
15assumption  ⊢  
16theorem  ⊢  
 proveit.logic.equality.sub_left_side_into
17assumption  ⊢  
18assumption  ⊢  
19conjecture  ⊢  
 proveit.logic.booleans.unfold_is_bool_explicit
20assumption  ⊢