logo
In [1]:
import proveit
from proveit import defaults
from proveit import m, x, y, A, B, S
from proveit.numbers import two
from proveit.logic import SetEquiv, Union
from proveit.logic.sets.equivalence  import set_equiv_def
from proveit.logic.sets.inclusion  import subset_eq_def
from proveit.logic.sets.unification  import union_def

theory = proveit.Theory() # the theorem's theory
In [2]:
%proving union_with_superset_is_superset
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
union_with_superset_is_superset:
(see dependencies)
In [3]:
defaults.assumptions = union_with_superset_is_superset.all_conditions()
defaults.assumptions:
In [4]:
set_equiv_def
In [5]:
set_equiv_def_spec = set_equiv_def.instantiate({A:Union(A, S), B:S})
set_equiv_def_spec:  ⊢  
In [6]:
set_equiv_def_spec_r_h_s = set_equiv_def_spec.rhs
set_equiv_def_spec_r_h_s:

First, let's focus on the easiest: $S \subseteq (A\cup S)$

In [7]:
subset_eq_def
In [8]:
subset_eq_def_inst_S_subset_eq_AUS = subset_eq_def.instantiate({A:S, B:Union(A, S)})
subset_eq_def_inst_S_subset_eq_AUS:  ⊢  
In [9]:
subset_eq_def_inst_S_subset_eq_AUS.rhs
In [10]:
union_def
In [11]:
union_def_inst_AUS = union_def.instantiate({m:two, x:y, A:[A,S]})
union_def_inst_AUS:  ⊢  
In [12]:
union_def_inst_AUS.sub_right_side_into(subset_eq_def_inst_S_subset_eq_AUS)
In [ ]:
 
In [13]:
subset_eq_def
In [14]:
subset_eq_def_inst_01 = subset_eq_def.instantiate({A:A, B:S})
subset_eq_def_inst_01:  ⊢  
In [15]:
subset_eq_def_inst_01_kt = subset_eq_def_inst_01.rhs.prove()
subset_eq_def_inst_01_kt:  ⊢  
In [16]:
subset_eq_def_inst_02 = subset_eq_def.instantiate({A:Union(A, S), B:S})
subset_eq_def_inst_02:  ⊢  
In [17]:
subset_eq_def_inst_03 = subset_eq_def.instantiate({A:S, B:Union(A, S)})
subset_eq_def_inst_03:  ⊢  
In [18]:
union_def
In [19]:
# union_def_spec = union_def.instantiate({m:two, x:x, AA:[A, S]})
union_def_spec = union_def.instantiate({m:two, x:x, A:[A, S]})
union_def_spec:  ⊢  
In [20]:
# %qed