logo
In [1]:
import proveit
theory = proveit.Theory() # the theorem's theory
from proveit import defaults
from proveit import f, P, x, y
from proveit.core_expr_types.operations  import operands_substitution_via_tuple
In [2]:
%proving sub_in_left_operands_via_tuple
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
sub_in_left_operands_via_tuple:
(see dependencies)
In [3]:
defaults.assumptions = sub_in_left_operands_via_tuple.all_conditions()
defaults.assumptions:
In [4]:
operands_substitution_via_tuple
In [5]:
Px_eq_Py = operands_substitution_via_tuple.instantiate({f:P, y:y}, auto_simplify=False)
Px_eq_Py: ,  ⊢  
In [6]:
Px_eq_Py.derive_left_via_equality()
, ,  ⊢  
sub_in_left_operands_via_tuple may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [7]:
%qed
proveit.logic.equality.sub_in_left_operands_via_tuple has been proven.
Out[7]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3, 4, ,  ⊢  
  : , :
2theorem  ⊢  
 proveit.logic.equality.lhs_via_equality
3assumption  ⊢  
4instantiation5, 6, 7,  ⊢  
  : , : , : , :
5conjecture  ⊢  
 proveit.core_expr_types.operations.operands_substitution_via_tuple
6assumption  ⊢  
7assumption  ⊢