logo
In [1]:
import proveit
from proveit import defaults
from proveit import A, B, x
from proveit.logic import And
from proveit.logic.sets import SetEquiv, SubsetEq
from proveit.logic.sets.equivalence  import set_equiv_def
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving set_equiv_reversal
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
set_equiv_reversal:
(see dependencies)

While this can be proven through automation, this manual proof is shorter and easy to follow.

In [3]:
A_equiv_B = set_equiv_reversal.condition
A_equiv_B:
In [4]:
defaults.assumptions = [A_equiv_B]
defaults.assumptions:
In [5]:
unfolded = A_equiv_B.unfold()
unfolded:  ⊢  
set_equiv_reversal may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [6]:
unfolded.instantiate().derive_reversed().generalize(x)
In [7]:
%qed
proveit.logic.sets.equivalence.set_equiv_reversal has been proven.
Out[7]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3  ⊢  
  : , :
2theorem  ⊢  
 proveit.logic.sets.equivalence.set_equiv_fold
3generalization4  ⊢  
4instantiation5, 6  ⊢  
  : , :
5theorem  ⊢  
 proveit.logic.equality.equals_reversal
6instantiation7, 8  ⊢  
  : , :
7theorem  ⊢  
 proveit.logic.sets.equivalence.set_equiv_unfold
8assumption  ⊢