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.
namespace Mt.Utils.Nat

theorem 
max_of_le: ∀ {a b : Nat}, a bNat.max a b = b
max_of_le
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
b: Nat
b
:=
a, b: Nat


a bNat.max a b = b
a, b: Nat

h: a b


Nat.max a b = b
a, b: Nat


a bNat.max a b = b
a, b: Nat

h: a b


Nat.max a b = b
a, b: Nat


a bNat.max a b = b

Goals accomplished! 🐙
theorem
max_of_eq': ∀ {a b : Nat}, a = bNat.max a b = b
max_of_eq'
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
=
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
b: Nat
b
:= λ
h: ?m.141
h
=>
max_of_le: ∀ {a b : Nat}, a bNat.max a b = b
max_of_le
(
a, b: Nat

h: a = b


a b
a, b: Nat

h: a = b


a b
a, b: Nat

h: a = b


b b
a, b: Nat

h: a = b


b b
a, b: Nat

h: a = b


a b
a, b: Nat

h: a = b


b b
a, b: Nat

h: a = b


a b

Goals accomplished! 🐙
) theorem
max_of_eq: ∀ {a b : Nat}, a = bNat.max a b = a
max_of_eq
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
=
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
a: Nat
a
:=
a, b: Nat


a = bNat.max a b = a
a, b: Nat

h: a = b


Nat.max a b = a
a, b: Nat


a = bNat.max a b = a
a, b: Nat

h: a = b


Nat.max a b = a
a, b: Nat


a = bNat.max a b = a
a, b: Nat

h: a = b


Nat.max a b = a
a, b: Nat

h: a = b


b = a
a, b: Nat

h: a = b


b = a
a, b: Nat


a = bNat.max a b = a
a, b: Nat

h: a = b


b = a
a, b: Nat


a = bNat.max a b = a

Goals accomplished! 🐙
theorem
max_of_gt: ∀ {a b : Nat}, a > bNat.max a b = a
max_of_gt
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
>
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
a: Nat
a
:=
a, b: Nat


a > bNat.max a b = a
a, b: Nat

h: a > b


Nat.max a b = a
a, b: Nat


a > bNat.max a b = a
a, b: Nat

h: a > b


Nat.max a b = a
a, b: Nat


a > bNat.max a b = a

Goals accomplished! 🐙
theorem
max_of_ge: ∀ {a b : Nat}, a bNat.max a b = a
max_of_ge
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
a: Nat
a
:=
a, b: Nat


a bNat.max a b = a
a, b: Nat

h: a b


Nat.max a b = a
a, b: Nat


a bNat.max a b = a
a, b: Nat

h: a b


inl
Nat.max a b = a
a, b: Nat

h: a b


inr
Nat.max a b = a
a, b: Nat

h: a b


Nat.max a b = a
a, b: Nat

h: a b


inl
Nat.max a b = a
a, b: Nat

h: a b


inr
Nat.max a b = a
a, b: Nat

h: a b


Nat.max a b = a
a, b: Nat

h: b = a


inl
Nat.max a b = a
a, b: Nat


a bNat.max a b = a
a, b: Nat

h: b = a


inl
Nat.max a b = a
a, b: Nat

h: b = a


inl
Nat.max a b = a
a, b: Nat

h: b < a


inr
Nat.max a b = a

Goals accomplished! 🐙
a, b: Nat


a bNat.max a b = a
a, b: Nat

h: b < a


inr
Nat.max a b = a
a, b: Nat

h: b < a


inr
Nat.max a b = a

Goals accomplished! 🐙
theorem
max_of_lt: ∀ {a b : Nat}, a < bNat.max a b = b
max_of_lt
{
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
} :
a: Nat
a
<
b: Nat
b
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
b: Nat
b
:=
max_of_le: ∀ {a b : Nat}, a bNat.max a b = b
max_of_le
Nat.le_of_lt: ∀ {n m : Nat}, n < mn m
Nat.le_of_lt
theorem
max_comm: ∀ (a b : Nat), Nat.max a b = Nat.max b a
max_comm
: ∀
a: Nat
a
b: Nat
b
:
Nat: Type
Nat
,
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
=
b: Nat
b
.
max: NatNatNat
max
a: Nat
a
:=

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat


Nat.max a b = Nat.max b a

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat


inl
Nat.max a b = Nat.max b a
a, b: Nat


inr
Nat.max a b = Nat.max b a
a, b: Nat


Nat.max a b = Nat.max b a
a, b: Nat


inl
Nat.max a b = Nat.max b a
a, b: Nat


inr
Nat.max a b = Nat.max b a
a, b: Nat


Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr
Nat.max a b = Nat.max b a

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat

h: a < b


inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a < b


inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr
Nat.max a b = Nat.max b a
a, b: Nat

h: a < b


inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a < b


inl
b = Nat.max b a
a, b: Nat

h: a < b


inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a < b


inl
b = b

Goals accomplished! 🐙

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: a b


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
Nat.max a b = Nat.max b a

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
Nat.max a b = b
a, b: Nat

h: b = a


inr.inl
Nat.max a b = Nat.max b a
a, b: Nat

h: b = a


inr.inl
b = b

Goals accomplished! 🐙

∀ (a b : Nat), Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = a
a, b: Nat

h: b < a


inr.inr
Nat.max a b = Nat.max b a
a, b: Nat

h: b < a


inr.inr
a = a

Goals accomplished! 🐙
theorem
max_assoc: ∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
max_assoc
: ∀
a: Nat
a
b: Nat
b
c: Nat
c
:
Nat: Type
Nat
, (
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
).
max: NatNatNat
max
c: Nat
c
=
a: Nat
a
.
max: NatNatNat
max
(
b: Nat
b
.
max: NatNatNat
max
c: Nat
c
) :=

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat


inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max b c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
c = Nat.max a c
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b < c


inl.inl
c = c

Goals accomplished! 🐙

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max b c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
b = Nat.max a b
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a < b

bc: b c


inl.inr
b = b

Goals accomplished! 🐙

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max a c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b < c


inr.inl
Nat.max a c = Nat.max a c

Goals accomplished! 🐙

∀ (a b c : Nat), Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max a c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max a c = Nat.max a b
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max a c = a
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max a c = a
a, b, c: Nat

ab: a b

bc: b c


inr.inr
Nat.max (Nat.max a b) c = Nat.max a (Nat.max b c)

Goals accomplished! 🐙
theorem
zero_max: ∀ (a : Nat), Nat.max 0 a = a
zero_max
: ∀
a: Nat
a
:
Nat: Type
Nat
, ((
0: ?m.1143
0
:
Nat: Type
Nat
).
max: NatNatNat
max
a: Nat
a
) =
a: Nat
a
:=

∀ (a : Nat), Nat.max 0 a = a
a: Nat


Nat.max 0 a = a

∀ (a : Nat), Nat.max 0 a = a

Goals accomplished! 🐙
theorem
max_zero: ∀ (a : Nat), Nat.max a 0 = a
max_zero
: ∀
a: Nat
a
:
Nat: Type
Nat
, (
a: Nat
a
.
max: NatNatNat
max
0: ?m.1271
0
) =
a: Nat
a
:=fun
a: ?m.1282
a
=> calc (
a: ?m.1282
a
.
max: NatNatNat
max
0: ?m.1289
0
) =
Nat.max: NatNatNat
Nat.max
0: ?m.1292
0
a: ?m.1282
a
:=
max_comm: ∀ (a b : Nat), Nat.max a b = Nat.max b a
max_comm
..
_: ?m.1305
_
=
a: ?m.1282
a
:=
zero_max: ∀ (a : Nat), Nat.max 0 a = a
zero_max
a: ?m.1282
a
theorem
max_le: ∀ {a b c : Nat}, Nat.max a b c a c b c
max_le
{
a: Nat
a
b: Nat
b
c: Nat
c
:
Nat: Type
Nat
} :
a: Nat
a
.
max: NatNatNat
max
b: Nat
b
c: Nat
c
a: Nat
a
c: Nat
c
b: Nat
b
c: Nat
c
:=
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat


mp
Nat.max a b ca c b c
a, b, c: Nat


mpr
a c b cNat.max a b c
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat


mp
Nat.max a b ca c b c
a, b, c: Nat


mpr
a c b cNat.max a b c
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat

h: Nat.max a b c


mp
a c b c
a, b, c: Nat


mp
Nat.max a b ca c b c
a, b, c: Nat

h: a c b c


mpr
Nat.max a b c
a, b, c: Nat


mp
Nat.max a b ca c b c
a, b, c: Nat

h: a c b c


mpr
Nat.max a b c
a, b, c: Nat

h: a c b c


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c


mpr
Nat.max a b c
a, b, c: Nat

h: Nat.max a b c


mp.inl
a c b c
a, b, c: Nat

h: Nat.max a b c


mp.inr
a c b c
a, b, c: Nat

h: a c b c


mpr
Nat.max a b c
a, b, c: Nat

h: Nat.max a b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: Nat.max a b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a < b


mp.inl
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c

Goals accomplished! 🐙
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: Nat.max a b c

ab: a b


mp.inr
a c b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c

Goals accomplished! 🐙
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
b c
a, b, c: Nat

h: a c b c

ab: a < b


mpr.inl
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c

Goals accomplished! 🐙
a, b, c: Nat


Nat.max a b c a c b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
a c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
a c
a, b, c: Nat

h: a c b c

ab: a b


mpr.inr
Nat.max a b c

Goals accomplished! 🐙
end Mt.Utils.Nat