logo
In [1]:
import proveit
theory = proveit.Theory() # the theorem's theory
from proveit import x, y, defaults
from proveit.logic import Equals, InSet
from proveit.numbers import greater_eq, Less, Real
from proveit.numbers.ordering import less_eq_def, min_def_bin
In [2]:
%proving min_y_le_x
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
min_y_le_x:
(see dependencies)
In [3]:
defaults.assumptions = min_y_le_x.conditions
defaults.assumptions:
In [4]:
min_def_bin
In [5]:
min_x_y = min_def_bin.instantiate({x: x, y: y}, auto_simplify=False)
min_x_y: ,  ⊢  

We proceed by breaking the assumption $y \ge x$ into 2 cases

In [6]:
less_eq_def
In [7]:
y_le_x_def = less_eq_def.instantiate({x: y, y: x})
y_le_x_def:  ⊢  
In [8]:
y_le_x_def.derive_right_via_equality()

Case 1: $y < x$

In [9]:
min_x_y_is_y_if_y_less_x = min_x_y.inner_expr().rhs.simplify(assumptions=[InSet(x, Real), InSet(y, Real), Less(y, x)])
min_x_y_is_y_if_y_less_x: , ,  ⊢  

Case 2: $y = x$

In [10]:
greater_eq(y, x).prove(assumptions=[InSet(x, Real), InSet(y, Real), Equals(y, x)])
, ,  ⊢  
In [11]:
min_x_y_when_y_eq_x = min_x_y.inner_expr().rhs.simplify(assumptions=[InSet(x, Real), InSet(y, Real), Equals(y, x)])
min_x_y_when_y_eq_x: , ,  ⊢  
In [12]:
# Use the fact that x = y to substitute
min_x_y_when_y_eq_x.inner_expr().rhs.substitute(y, assumptions=[Equals(y, x)], auto_simplify=False)
, ,  ⊢  

Combine the 2 cases

In [13]:
y_le_x_def.rhs.derive_via_singular_dilemma(
    min_x_y_is_y_if_y_less_x.expr)
, ,  ⊢  
min_y_le_x may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [14]:
%qed
proveit.numbers.ordering.min_y_le_x has been proven.
Out[14]:
 step typerequirementsstatement
0generalization1  ⊢  
1instantiation2, 3, 4, 13, 5, 6, ,  ⊢  
  : , : , :
2theorem  ⊢  
 proveit.logic.booleans.disjunction.singular_constructive_dilemma
3instantiation7, 9  ⊢  
  : , :
4instantiation8, 9  ⊢  
  : , :
5deduction10,  ⊢  
6deduction11,  ⊢  
7axiom  ⊢  
 proveit.logic.booleans.disjunction.left_in_bool
8axiom  ⊢  
 proveit.logic.booleans.disjunction.right_in_bool
9instantiation12, 13  ⊢  
  :
10instantiation22, 23, 14, ,  ⊢  
  : , : , :
11instantiation15, 16, 56, ,  ⊢  
  : , : , :
12conjecture  ⊢  
 proveit.logic.booleans.in_bool_if_true
13instantiation17, 18, 19  ⊢  
  : , :
14instantiation33, 20, 21, ,  ⊢  
  : , : , :
15theorem  ⊢  
 proveit.logic.equality.sub_left_side_into
16instantiation22, 23, 24, ,  ⊢  
  : , : , :
17theorem  ⊢  
 proveit.logic.equality.rhs_via_equality
18assumption  ⊢  
19instantiation25  ⊢  
  : , :
20instantiation33, 26, 27, ,  ⊢  
  : , : , :
21instantiation36, 38, 37, 39  ⊢  
  : , : , : , : , :
22theorem  ⊢  
 proveit.logic.equality.sub_right_side_into
23instantiation28, 52, 53,  ⊢  
  : , :
24instantiation33, 29, 30, ,  ⊢  
  : , : , :
25axiom  ⊢  
 proveit.numbers.ordering.less_eq_def
26instantiation42, 31, ,  ⊢  
  : , : , :
27instantiation42, 32  ⊢  
  : , : , :
28axiom  ⊢  
 proveit.numbers.ordering.min_def_bin
29instantiation33, 34, 35, ,  ⊢  
  : , : , :
30instantiation36, 37, 38, 39  ⊢  
  : , : , : , : , :
31instantiation47, 40, ,  ⊢  
  : , :
32instantiation46, 45  ⊢  
  : , :
33axiom  ⊢  
 proveit.logic.equality.equals_transitivity
34instantiation42, 41, ,  ⊢  
  : , : , :
35instantiation42, 43, ,  ⊢  
  : , : , :
36axiom  ⊢  
 proveit.core_expr_types.conditionals.true_case_reduction
37axiom  ⊢  
 proveit.numbers.number_sets.natural_numbers.zero_in_nats
38theorem  ⊢  
 proveit.numbers.numerals.decimals.nat1
39conjecture  ⊢  
 proveit.core_expr_types.tuples.tuple_len_0_typical_eq
40instantiation44, 53, 52, 45, ,  ⊢  
  : , :
41instantiation46, 50, ,  ⊢  
  : , :
42axiom  ⊢  
 proveit.logic.equality.substitution
43instantiation47, 48, ,  ⊢  
  : , :
44conjecture  ⊢  
 proveit.numbers.ordering.not_less_eq_from_less
45assumption  ⊢  
46conjecture  ⊢  
 proveit.core_expr_types.conditionals.satisfied_condition_reduction
47conjecture  ⊢  
 proveit.core_expr_types.conditionals.dissatisfied_condition_reduction
48instantiation49, 52, 53, 50, ,  ⊢  
  : , :
49conjecture  ⊢  
 proveit.numbers.ordering.not_less_from_less_eq
50instantiation51, 52, 53, 54, ,  ⊢  
  : , :
51conjecture  ⊢  
 proveit.numbers.ordering.relax_equal_to_less_eq
52assumption  ⊢  
53assumption  ⊢  
54instantiation55, 56  ⊢  
  : , :
55theorem  ⊢  
 proveit.logic.equality.equals_reversal
56assumption  ⊢