logo
In [1]:
import proveit
from proveit import A
from proveit.logic import Not
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving double_negation_intro
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
double_negation_intro:
(see dependencies)
double_negation_intro may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [3]:
not_a_eq_F = Not(A).evaluation(assumptions=[A])
not_a_eq_F:  ⊢  
In [4]:
not_a_eq_F.derive_via_boolean_equality()
In [5]:
%qed # proven via automation
proveit.logic.booleans.negation.double_negation_intro has been proven.
Out[5]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3  ⊢  
  :
2conjecture  ⊢  
 proveit.logic.booleans.negation.negation_intro
3instantiation4, 5, 6  ⊢  
  : , : , :
4axiom  ⊢  
 proveit.logic.equality.equals_transitivity
5instantiation7, 8  ⊢  
  : , : , :
6axiom  ⊢  
 proveit.logic.booleans.negation.not_t
7axiom  ⊢  
 proveit.logic.equality.substitution
8instantiation9, 10  ⊢  
  :
9axiom  ⊢  
 proveit.logic.booleans.eq_true_intro
10assumption  ⊢