logo
In [1]:
import proveit
from proveit import defaults
from proveit import x, y
from proveit.logic.equality  import equals_symmetry
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving not_equals_symmetry
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
not_equals_symmetry:
(see dependencies)
not_equals_symmetry may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [3]:
defaults.assumptions = not_equals_symmetry.conditions
defaults.assumptions:
In [4]:
x_neq_y = defaults.assumptions[0]
x_neq_y:
In [5]:
not__x_eq_y = x_neq_y.unfold()
not__x_eq_y:  ⊢  
In [6]:
equals_symmetry
In [7]:
# substitute x=y with y=x within Not(x=y)
equals_symmetry.instantiate({x:x, y:y}).sub_left_side_into(not__x_eq_y.inner_expr().operand)
In [8]:
%qed
proveit.logic.equality.not_equals_symmetry has been proven.
Out[8]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3  ⊢  
  : , :
2theorem  ⊢  
 proveit.logic.equality.fold_not_equals
3instantiation4, 5, 6  ⊢  
  : , : , :
4theorem  ⊢  
 proveit.logic.equality.sub_left_side_into
5instantiation7, 8  ⊢  
  : , :
6instantiation9  ⊢  
  : , :
7conjecture  ⊢  
 proveit.logic.equality.unfold_not_equals
8assumption  ⊢  
9axiom  ⊢  
 proveit.logic.equality.equals_symmetry