logo
In [1]:
import proveit
from proveit import defaults
from proveit.logic import Equals, NotEquals, Implies, Not, And, Forall, TRUE, FALSE, in_bool
from proveit import A
from proveit.logic.equality import not_equals_contradiction
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving not_true_via_contradiction
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
not_true_via_contradiction:
(see dependencies)
In [3]:
AeqT = Equals(A, TRUE)
AeqT:
In [4]:
defaults.assumptions = not_true_via_contradiction.all_conditions() + [AeqT]
defaults.assumptions:
In [5]:
AeqT.deduce_in_bool()
In [6]:
AeqT_impl_F = FALSE.prove().as_implication(AeqT)
AeqT_impl_F:  ⊢  
not_true_via_contradiction may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [7]:
AeqT_impl_F.derive_via_contradiction()

We'll now by able to generate a proof-by-contradiction via automation.

In [8]:
%qed
proveit.logic.booleans.implication.not_true_via_contradiction has been proven.
Out[8]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3  ⊢  
  : , :
2theorem  ⊢  
 proveit.logic.equality.fold_not_equals
3instantiation4, 5, 6  ⊢  
  :
4axiom  ⊢  
 proveit.logic.booleans.implication.denial_via_contradiction
5instantiation7  ⊢  
  : , :
6deduction8  ⊢  
7axiom  ⊢  
 proveit.logic.equality.equality_in_bool
8modus ponens9, 10,  ⊢  
9assumption  ⊢  
10instantiation11, 12  ⊢  
  :
11axiom  ⊢  
 proveit.logic.booleans.eq_true_elim
12assumption  ⊢