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
%proving min_y_le_x
defaults.assumptions = min_y_le_x.conditions
min_def_bin
min_x_y = min_def_bin.instantiate({x: x, y: y}, auto_simplify=False)
less_eq_def
y_le_x_def = less_eq_def.instantiate({x: y, y: x})
y_le_x_def.derive_right_via_equality()
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)])
greater_eq(y, x).prove(assumptions=[InSet(x, Real), InSet(y, Real), Equals(y, x)])
min_x_y_when_y_eq_x = min_x_y.inner_expr().rhs.simplify(assumptions=[InSet(x, Real), InSet(y, Real), Equals(y, x)])
# 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)
y_le_x_def.rhs.derive_via_singular_dilemma(
min_x_y_is_y_if_y_less_x.expr)
%qed