Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Leonardo de Moura
-/

import Mathlib.Init.Algebra.Order

universe u

section

variable {
α: Type u
α
:
Type u: Type (u+1)
Type u
} [
LinearOrder: Type ?u.3811 → Type ?u.3811
LinearOrder
α: Type u
α
] lemma
min_def: ∀ {α : Type u} [inst : LinearOrder α] (a b : α), min a b = if a b then a else b
min_def
(
a: α
a
b: α
b
:
α: Type u
α
) :
min: {α : Type ?u.17} → [self : Min α] → ααα
min
a: α
a
b: α
b
= if
a: α
a
b: α
b
then
a: α
a
else
b: α
b
:=
LinearOrder.min_def: ∀ {α : Type ?u.70} [self : LinearOrder α] (a b : α), min a b = if a b then a else b
LinearOrder.min_def
.. lemma
min_le_left: ∀ {α : Type u} [inst : LinearOrder α] (a b : α), min a b a
min_le_left
(
a: α
a
b: α
b
:
α: Type u
α
) :
min: {α : Type ?u.104} → [self : Min α] → ααα
min
a: α
a
b: α
b
a: α
a
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α


min a b a

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α


min a b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


min a b a

Goals accomplished! 🐙
lemma
min_le_right: ∀ (a b : α), min a b b
min_le_right
(
a: α
a
b: α
b
:
α: Type u
α
) :
min: {α : Type ?u.708} → [self : Min α] → ααα
min
a: α
a
b: α
b
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b b

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


min a b b
α: Type u

inst✝: LinearOrder α

a, b: α


min a b b

Goals accomplished! 🐙
lemma
le_min: ∀ {a b c : α}, c ac bc min a b
le_min
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: c a
h₁
:
c: α
c
a: α
a
) (
h₂: c b
h₂
:
c: α
c
b: α
b
) :
c: α
c
min: {α : Type ?u.1309} → [self : Min α] → ααα
min
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: a b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: a b


c a
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: a b


c a
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: a b


c min a b

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: ¬a b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b


c min a b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: ¬a b


c b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: ¬a b


c b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: c a

h₂: c b

h: ¬a b


c min a b

Goals accomplished! 🐙
lemma
max_def: ∀ {α : Type u} [inst : LinearOrder α] (a b : α), max a b = if a b then b else a
max_def
(
a: α
a
b: α
b
:
α: Type u
α
) :
max: {α : Type ?u.1812} → [self : Max α] → ααα
max
a: α
a
b: α
b
= if
a: α
a
b: α
b
then
b: α
b
else
a: α
a
:=
LinearOrder.max_def: ∀ {α : Type ?u.1865} [self : LinearOrder α] (a b : α), max a b = if a b then b else a
LinearOrder.max_def
.. lemma
le_max_left: ∀ (a b : α), a max a b
le_max_left
(
a: α
a
b: α
b
:
α: Type u
α
) :
a: α
a
max: {α : Type ?u.1899} → [self : Max α] → ααα
max
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


a max a b

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


a max a b
α: Type u

inst✝: LinearOrder α

a, b: α


a max a b

Goals accomplished! 🐙
lemma
le_max_right: ∀ {α : Type u} [inst : LinearOrder α] (a b : α), b max a b
le_max_right
(
a: α
a
b: α
b
:
α: Type u
α
) :
b: α
b
max: {α : Type ?u.2465} → [self : Max α] → ααα
max
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α


b max a b

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α


b max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b a
α: Type u

inst✝: LinearOrder α

a, b: α

h: ¬a b


b max a b

Goals accomplished! 🐙
lemma
max_le: ∀ {α : Type u} [inst : LinearOrder α] {a b c : α}, a cb cmax a b c
max_le
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: a c
h₁
:
a: α
a
c: α
c
) (
h₂: b c
h₂
:
b: α
b
c: α
c
) :
max: {α : Type ?u.3074} → [self : Max α] → ααα
max
a: α
a
b: α
b
c: α
c
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: a b


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: a b


b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: a b


b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: a b


max a b c

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: ¬a b


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c


max a b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: ¬a b


a c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: ¬a b


a c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a c

h₂: b c

h: ¬a b


max a b c

Goals accomplished! 🐙
lemma
eq_min: ∀ {a b c : α}, c ac b(∀ {d : α}, d ad bd c) → c = min a b
eq_min
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: c a
h₁
:
c: α
c
a: α
a
) (
h₂: c b
h₂
:
c: α
c
b: α
b
) (
h₃: ∀ {d : α}, d ad bd c
h₃
: ∀{
d: ?m.3612
d
},
d: ?m.3612
d
a: α
a
d: ?m.3612
d
b: α
b
d: ?m.3612
d
c: α
c
) :
c: α
c
=
min: {α : Type ?u.3634} → [self : Min α] → ααα
min
a: α
a
b: α
b
:=
le_antisymm: ∀ {α : Type ?u.3654} [inst : PartialOrder α] {a b : α}, a bb aa = b
le_antisymm
(
le_min: ∀ {α : Type ?u.3668} [inst : LinearOrder α] {a b c : α}, c ac bc min a b
le_min
h₁: c a
h₁
h₂: c b
h₂
) (
h₃: ∀ {d : α}, d ad bd c
h₃
(
min_le_left: ∀ {α : Type ?u.3696} [inst : LinearOrder α] (a b : α), min a b a
min_le_left
a: α
a
b: α
b
) (
min_le_right: ∀ {α : Type ?u.3699} [inst : LinearOrder α] (a b : α), min a b b
min_le_right
a: α
a
b: α
b
)) lemma
min_comm: ∀ (a b : α), min a b = min b a
min_comm
(
a: α
a
b: α
b
:
α: Type u
α
) :
min: {α : Type ?u.3727} → [self : Min α] → ααα
min
a: α
a
b: α
b
=
min: {α : Type ?u.3739} → [self : Min α] → ααα
min
b: α
b
a: α
a
:=
eq_min: ∀ {α : Type ?u.3746} [inst : LinearOrder α] {a b c : α}, c ac b(∀ {d : α}, d ad bd c) → c = min a b
eq_min
(
min_le_right: ∀ {α : Type ?u.3762} [inst : LinearOrder α] (a b : α), min a b b
min_le_right
a: α
a
b: α
b
) (
min_le_left: ∀ {α : Type ?u.3765} [inst : LinearOrder α] (a b : α), min a b a
min_le_left
a: α
a
b: α
b
) (λ {
_: ?m.3769
_
}
h₁: ?m.3772
h₁
h₂: ?m.3775
h₂
=>
le_min: ∀ {α : Type ?u.3777} [inst : LinearOrder α] {a b c : α}, c ac bc min a b
le_min
h₂: ?m.3775
h₂
h₁: ?m.3772
h₁
) lemma
min_assoc: ∀ (a b c : α), min (min a b) c = min a (min b c)
min_assoc
(
a: α
a
b: α
b
c: α
c
:
α: Type u
α
) :
min: {α : Type ?u.3821} → [self : Min α] → ααα
min
(
min: {α : Type ?u.3824} → [self : Min α] → ααα
min
a: α
a
b: α
b
)
c: α
c
=
min: {α : Type ?u.3839} → [self : Min α] → ααα
min
a: α
a
(
min: {α : Type ?u.3842} → [self : Min α] → ααα
min
b: α
b
c: α
c
) :=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


min (min a b) c = min a (min b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
min (min a b) c a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


min (min a b) c = min a (min b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
min (min a b) c a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
min (min a b) c a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
min (min a b) c ?h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
?h₁.b a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
min (min a b) c ?h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
?h₁.b a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
min (min a b) c a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
min a b a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
min a b a
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
min (min a b) c a

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


min (min a b) c = min a (min b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁
min (min a b) c b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁
min (min a b) c b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
min (min a b) c ?h₂.h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
?h₂.h₁.b b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
min (min a b) c ?h₂.h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
?h₂.h₁.b b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
min a b b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
min a b b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
min (min a b) c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
min (min a b) c min b c

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


min (min a b) c = min a (min b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃
d min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃
d min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
d min a b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
d min a b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
d b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
d b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
min b c b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₁
min b c b
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
d c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
min b c c
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: d a

h₂: d min b c


h₃.h₂
min b c c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, d ad min b cd min (min a b) c

Goals accomplished! 🐙
lemma
min_left_comm: ∀ {α : Type u} [inst : LinearOrder α], LeftCommutative min
min_left_comm
: @
LeftCommutative: {α : Type ?u.4177} → {β : Type ?u.4176} → (αββ) → Prop
LeftCommutative
α: Type u
α
α: Type u
α
min: {α : Type ?u.4178} → [self : Min α] → ααα
min
:=
left_comm: ∀ {α : Type ?u.4200} (f : ααα), Commutative fAssociative fLeftCommutative f
left_comm
min: {α : Type ?u.4202} → [self : Min α] → ααα
min
(@
min_comm: ∀ {α : Type ?u.4226} [inst : LinearOrder α] (a b : α), min a b = min b a
min_comm
α: Type u
α
_) (@
min_assoc: ∀ {α : Type ?u.4229} [inst : LinearOrder α] (a b c : α), min (min a b) c = min a (min b c)
min_assoc
α: Type u
α
_) @[simp] lemma
min_self: ∀ {α : Type u} [inst : LinearOrder α] (a : α), min a a = a
min_self
(
a: α
a
:
α: Type u
α
) :
min: {α : Type ?u.4245} → [self : Min α] → ααα
min
a: α
a
a: α
a
=
a: α
a
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a: α


min a a = a

Goals accomplished! 🐙
lemma
min_eq_left: ∀ {a b : α}, a bmin a b = a
min_eq_left
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: a b
h
:
a: α
a
b: α
b
) :
min: {α : Type ?u.4505} → [self : Min α] → ααα
min
a: α
a
b: α
b
=
a: α
a
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


h
a = min a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


h
a = min a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


h
∀ {d : α}, d ad bd a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


h
∀ {d : α}, d ad bd a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b

d✝: α

a✝¹: d✝ a

a✝: d✝ b


h
d✝ a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b

d✝: α

a✝¹: d✝ a

a✝: d✝ b


h
d✝ a
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


min a b = a

Goals accomplished! 🐙
lemma
min_eq_right: ∀ {a b : α}, b amin a b = b
min_eq_right
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: b a
h
:
b: α
b
a: α
a
) :
min: {α : Type ?u.4651} → [self : Min α] → ααα
min
a: α
a
b: α
b
=
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


min a b = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


min a b = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


min b a = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


min b a = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


min a b = b

Goals accomplished! 🐙
lemma
eq_max: ∀ {α : Type u} [inst : LinearOrder α] {a b c : α}, a cb c(∀ {d : α}, a db dc d) → c = max a b
eq_max
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: a c
h₁
:
a: α
a
c: α
c
) (
h₂: b c
h₂
:
b: α
b
c: α
c
) (
h₃: ∀ {d : α}, a db dc d
h₃
: ∀{
d: ?m.4751
d
},
a: α
a
d: ?m.4751
d
b: α
b
d: ?m.4751
d
c: α
c
d: ?m.4751
d
) :
c: α
c
=
max: {α : Type ?u.4773} → [self : Max α] → ααα
max
a: α
a
b: α
b
:=
le_antisymm: ∀ {α : Type ?u.4793} [inst : PartialOrder α] {a b : α}, a bb aa = b
le_antisymm
(
h₃: ∀ {d : α}, a db dc d
h₃
(
le_max_left: ∀ {α : Type ?u.4816} [inst : LinearOrder α] (a b : α), a max a b
le_max_left
a: α
a
b: α
b
) (
le_max_right: ∀ {α : Type ?u.4820} [inst : LinearOrder α] (a b : α), b max a b
le_max_right
a: α
a
b: α
b
)) (
max_le: ∀ {α : Type ?u.4823} [inst : LinearOrder α] {a b c : α}, a cb cmax a b c
max_le
h₁: a c
h₁
h₂: b c
h₂
) lemma
max_comm: ∀ (a b : α), max a b = max b a
max_comm
(
a: α
a
b: α
b
:
α: Type u
α
) :
max: {α : Type ?u.4866} → [self : Max α] → ααα
max
a: α
a
b: α
b
=
max: {α : Type ?u.4878} → [self : Max α] → ααα
max
b: α
b
a: α
a
:=
eq_max: ∀ {α : Type ?u.4885} [inst : LinearOrder α] {a b c : α}, a cb c(∀ {d : α}, a db dc d) → c = max a b
eq_max
(
le_max_right: ∀ {α : Type ?u.4901} [inst : LinearOrder α] (a b : α), b max a b
le_max_right
a: α
a
b: α
b
) (
le_max_left: ∀ {α : Type ?u.4904} [inst : LinearOrder α] (a b : α), a max a b
le_max_left
a: α
a
b: α
b
) (λ {
_: ?m.4908
_
}
h₁: ?m.4911
h₁
h₂: ?m.4914
h₂
=>
max_le: ∀ {α : Type ?u.4916} [inst : LinearOrder α] {a b c : α}, a cb cmax a b c
max_le
h₂: ?m.4914
h₂
h₁: ?m.4911
h₁
) lemma
max_assoc: ∀ (a b c : α), max (max a b) c = max a (max b c)
max_assoc
(
a: α
a
b: α
b
c: α
c
:
α: Type u
α
) :
max: {α : Type ?u.4960} → [self : Max α] → ααα
max
(
max: {α : Type ?u.4963} → [self : Max α] → ααα
max
a: α
a
b: α
b
)
c: α
c
=
max: {α : Type ?u.4978} → [self : Max α] → ααα
max
a: α
a
(
max: {α : Type ?u.4981} → [self : Max α] → ααα
max
b: α
b
c: α
c
) :=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


max (max a b) c = max a (max b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
a max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


max (max a b) c = max a (max b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
a max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
a max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
a ?h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
?h₁.b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
a ?h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
?h₁.b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
a max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
max a b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁.a
max a b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₁
a max (max a b) c

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


max (max a b) c = max a (max b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁
b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁
b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
b ?h₂.h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
?h₂.h₁.b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
b ?h₂.h₁.b
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
?h₂.h₁.b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.b
α
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
max a b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₁.a
max a b max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂.h₂
c max (max a b) c
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₂
max b c max (max a b) c

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α


max (max a b) c = max a (max b c)
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃
max (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃
max (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₁
max a b d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₁
max a b d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₁
b d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₁
b d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c, d: α

h₁: a d

h₂: max b c d


h₃.h₂
c d
α: Type u

inst✝: LinearOrder α

a, b, c: α


h₃
∀ {d : α}, a dmax b c dmax (max a b) c d

Goals accomplished! 🐙
lemma
max_left_comm: ∀ {α : Type u} [inst : LinearOrder α] (a b c : α), max a (max b c) = max b (max a c)
max_left_comm
: ∀ (
a: α
a
b: α
b
c: α
c
:
α: Type u
α
),
max: {α : Type ?u.5315} → [self : Max α] → ααα
max
a: α
a
(
max: {α : Type ?u.5318} → [self : Max α] → ααα
max
b: α
b
c: α
c
) =
max: {α : Type ?u.5333} → [self : Max α] → ααα
max
b: α
b
(
max: {α : Type ?u.5336} → [self : Max α] → ααα
max
a: α
a
c: α
c
) :=
left_comm: ∀ {α : Type ?u.5344} (f : ααα), Commutative fAssociative fLeftCommutative f
left_comm
max: {α : Type ?u.5346} → [self : Max α] → ααα
max
(@
max_comm: ∀ {α : Type ?u.5373} [inst : LinearOrder α] (a b : α), max a b = max b a
max_comm
α: Type u
α
_) (@
max_assoc: ∀ {α : Type ?u.5376} [inst : LinearOrder α] (a b c : α), max (max a b) c = max a (max b c)
max_assoc
α: Type u
α
_) @[simp] lemma
max_self: ∀ {α : Type u} [inst : LinearOrder α] (a : α), max a a = a
max_self
(
a: α
a
:
α: Type u
α
) :
max: {α : Type ?u.5392} → [self : Max α] → ααα
max
a: α
a
a: α
a
=
a: α
a
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a: α


max a a = a

Goals accomplished! 🐙
lemma
max_eq_left: ∀ {a b : α}, b amax a b = a
max_eq_left
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: b a
h
:
b: α
b
a: α
a
) :
max: {α : Type ?u.5652} → [self : Max α] → ααα
max
a: α
a
b: α
b
=
a: α
a
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


max a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


h
a = max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


h
a = max a b
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


max a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


h
∀ {d : α}, a db da d
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


h
∀ {d : α}, a db da d
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


max a b = a
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a

d✝: α

a✝¹: a d✝

a✝: b d✝


h
a d✝
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a

d✝: α

a✝¹: a d✝

a✝: b d✝


h
a d✝
α: Type u

inst✝: LinearOrder α

a, b: α

h: b a


max a b = a

Goals accomplished! 🐙
lemma
max_eq_right: ∀ {α : Type u} [inst : LinearOrder α] {a b : α}, a bmax a b = b
max_eq_right
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: a b
h
:
a: α
a
b: α
b
) :
max: {α : Type ?u.5798} → [self : Max α] → ααα
max
a: α
a
b: α
b
=
b: α
b
:=

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max a b = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max a b = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max b a = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max b a = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max b a = b
α: Type u

inst✝: LinearOrder α

a, b: α

h: a b


max a b = b

Goals accomplished! 🐙
/- these rely on lt_of_lt -/ lemma
min_eq_left_of_lt: ∀ {a b : α}, a < bmin a b = a
min_eq_left_of_lt
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: a < b
h
:
a: α
a
<
b: α
b
) :
min: {α : Type ?u.5880} → [self : Min α] → ααα
min
a: α
a
b: α
b
=
a: α
a
:=
min_eq_left: ∀ {α : Type ?u.5894} [inst : LinearOrder α] {a b : α}, a bmin a b = a
min_eq_left
(
le_of_lt: ∀ {α : Type ?u.5909} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
h: a < b
h
) lemma
min_eq_right_of_lt: ∀ {a b : α}, b < amin a b = b
min_eq_right_of_lt
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: b < a
h
:
b: α
b
<
a: α
a
) :
min: {α : Type ?u.5976} → [self : Min α] → ααα
min
a: α
a
b: α
b
=
b: α
b
:=
min_eq_right: ∀ {α : Type ?u.5990} [inst : LinearOrder α] {a b : α}, b amin a b = b
min_eq_right
(
le_of_lt: ∀ {α : Type ?u.6005} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
h: b < a
h
) lemma
max_eq_left_of_lt: ∀ {a b : α}, b < amax a b = a
max_eq_left_of_lt
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: b < a
h
:
b: α
b
<
a: α
a
) :
max: {α : Type ?u.6072} → [self : Max α] → ααα
max
a: α
a
b: α
b
=
a: α
a
:=
max_eq_left: ∀ {α : Type ?u.6086} [inst : LinearOrder α] {a b : α}, b amax a b = a
max_eq_left
(
le_of_lt: ∀ {α : Type ?u.6101} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
h: b < a
h
) lemma
max_eq_right_of_lt: ∀ {a b : α}, a < bmax a b = b
max_eq_right_of_lt
{
a: α
a
b: α
b
:
α: Type u
α
} (
h: a < b
h
:
a: α
a
<
b: α
b
) :
max: {α : Type ?u.6168} → [self : Max α] → ααα
max
a: α
a
b: α
b
=
b: α
b
:=
max_eq_right: ∀ {α : Type ?u.6182} [inst : LinearOrder α] {a b : α}, a bmax a b = b
max_eq_right
(
le_of_lt: ∀ {α : Type ?u.6197} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
h: a < b
h
) /- these use the fact that it is a linear ordering -/ lemma
lt_min: ∀ {a b c : α}, a < ba < ca < min b c
lt_min
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: a < b
h₁
:
a: α
a
<
b: α
b
) (
h₂: a < c
h₂
:
a: α
a
<
c: α
c
) :
a: α
a
<
min: {α : Type ?u.6271} → [self : Min α] → ααα
min
b: α
b
c: α
c
:=
Or.elim: ∀ {a b c : Prop}, a b(ac) → (bc) → c
Or.elim
(
le_or_gt: ∀ {α : Type ?u.6296} [inst : LinearOrder α] (a b : α), a b a > b
le_or_gt
b: α
b
c: α
c
) (λ
h: b c
h
:
b: α
b
c: α
c
=>

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b c


a < min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b c


a < min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b c


a < b
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b c


a < b
) (λ
h: b > c
h
:
b: α
b
>
c: α
c
=>

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b > c


a < min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b > c


a < min b c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b > c


a < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < b

h₂: a < c

h: b > c


a < c
) lemma
max_lt: ∀ {α : Type u} [inst : LinearOrder α] {a b c : α}, a < cb < cmax a b < c
max_lt
{
a: α
a
b: α
b
c: α
c
:
α: Type u
α
} (
h₁: a < c
h₁
:
a: α
a
<
c: α
c
) (
h₂: b < c
h₂
:
b: α
b
<
c: α
c
) :
max: {α : Type ?u.6423} → [self : Max α] → ααα
max
a: α
a
b: α
b
<
c: α
c
:=
Or.elim: ∀ {a b c : Prop}, a b(ac) → (bc) → c
Or.elim
(
le_or_gt: ∀ {α : Type ?u.6448} [inst : LinearOrder α] (a b : α), a b a > b
le_or_gt
a: α
a
b: α
b
) (λ
h: a b
h
:
a: α
a
b: α
b
=>

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a b


max a b < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a b


max a b < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a b


b < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a b


b < c
) (λ
h: a > b
h
:
a: α
a
>
b: α
b
=>

Goals accomplished! 🐙
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a > b


max a b < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a > b


max a b < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a > b


a < c
α: Type u

inst✝: LinearOrder α

a, b, c: α

h₁: a < c

h₂: b < c

h: a > b


a < c
) end