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) 2021 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies

! This file was ported from Lean 3 source module order.succ_pred.basic
! leanprover-community/mathlib commit 0111834459f5d7400215223ea95ae38a1265a907
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Order.CompleteLattice
import Mathlib.Order.Cover
import Mathlib.Order.Iterate

/-!
# Successor and predecessor

This file defines successor and predecessor orders. `succ a`, the successor of an element `a : α` is
the least element greater than `a`. `pred a` is the greatest element less than `a`. Typical examples
include `ℕ`, `ℤ`, `ℕ+`, `Fin n`, but also `ENat`, the lexicographic order of a successor/predecessor
order...

## Typeclasses

* `SuccOrder`: Order equipped with a sensible successor function.
* `PredOrder`: Order equipped with a sensible predecessor function.
* `IsSuccArchimedean`: `SuccOrder` where `succ` iterated to an element gives all the greater
  ones.
* `IsPredArchimedean`: `PredOrder` where `pred` iterated to an element gives all the smaller
  ones.

## Implementation notes

Maximal elements don't have a sensible successor. Thus the naïve typeclass
```lean
class NaiveSuccOrder (α : Type _) [Preorder α] :=
(succ : α → α)
(succ_le_iff : ∀ {a b}, succ a ≤ b ↔ a < b)
(lt_succ_iff : ∀ {a b}, a < succ b ↔ a ≤ b)
```
can't apply to an `OrderTop` because plugging in `a = b = ⊤` into either of `succ_le_iff` and
`lt_succ_iff` yields `⊤ < ⊤` (or more generally `m < m` for a maximal element `m`).
The solution taken here is to remove the implications `≤ → <` and instead require that `a < succ a`
for all non maximal elements (enforced by the combination of `le_succ` and the contrapositive of
`max_of_succ_le`).
The stricter condition of every element having a sensible successor can be obtained through the
combination of `SuccOrder α` and `NoMaxOrder α`.

## TODO

Is `GaloisConnection pred succ` always true? If not, we should introduce
```lean
class SuccPredOrder (α : Type _) [Preorder α] extends SuccOrder α, PredOrder α :=
(pred_succ_gc : GaloisConnection (pred : α → α) succ)
```
`Covby` should help here.
-/


open Function OrderDual Set

variable {
α: Type ?u.156
α
:
Type _: Type (?u.24483+1)
Type _
} /-- Order equipped with a sensible successor function. -/ @[ext] class
SuccOrder: {α : Type u_1} → [inst : Preorder α] → (succ : αα) → (∀ (a : α), a succ a) → (∀ {a : α}, succ a aIsMax a) → (∀ {a b : α}, a < bsucc a b) → (∀ {a b : α}, a < succ ba b) → SuccOrder α
SuccOrder
(
α: Type ?u.8
α
:
Type _: Type (?u.8+1)
Type _
) [
Preorder: Type ?u.11 → Type ?u.11
Preorder
α: Type ?u.8
α
] where /--Successor function-/
succ: {α : Type u_1} → [inst : Preorder α] → [self : SuccOrder α] → αα
succ
:
α: Type ?u.8
α
α: Type ?u.8
α
/--Proof of basic ordering with respect to `succ`-/
le_succ: ∀ {α : Type u_1} [inst : Preorder α] [self : SuccOrder α] (a : α), a SuccOrder.succ a
le_succ
: ∀
a: ?m.21
a
,
a: ?m.21
a
succ: αα
succ
a: ?m.21
a
/--Proof of interaction between `succ` and maximal element-/
max_of_succ_le: ∀ {α : Type u_1} [inst : Preorder α] [self : SuccOrder α] {a : α}, SuccOrder.succ a aIsMax a
max_of_succ_le
{
a: ?m.40
a
} :
succ: αα
succ
a: ?m.40
a
a: ?m.40
a
IsMax: {α : Type ?u.48} → [inst : LE α] → αProp
IsMax
a: ?m.40
a
/--Proof that `succ` satifies ordering invariants betweeen `LT` and `LE`-/
succ_le_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [self : SuccOrder α] {a b : α}, a < bSuccOrder.succ a b
succ_le_of_lt
{
a: ?m.69
a
b: ?m.72
b
} :
a: ?m.69
a
<
b: ?m.72
b
succ: αα
succ
a: ?m.69
a
b: ?m.72
b
/--Proof that `succ` satifies ordering invariants betweeen `LE` and `LT`-/
le_of_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [self : SuccOrder α] {a b : α}, a < SuccOrder.succ ba b
le_of_lt_succ
{
a: ?m.127
a
b: ?m.130
b
} :
a: ?m.127
a
<
succ: αα
succ
b: ?m.130
b
a: ?m.127
a
b: ?m.130
b
#align succ_order
SuccOrder: (α : Type u_1) → [inst : Preorder α] → Type u_1
SuccOrder
#align succ_order.ext_iff
SuccOrder.ext_iff: ∀ {α : Type u_1} {inst : Preorder α} (x y : SuccOrder α), x = y SuccOrder.succ = SuccOrder.succ
SuccOrder.ext_iff
#align succ_order.ext
SuccOrder.ext: ∀ {α : Type u_1} {inst : Preorder α} (x y : SuccOrder α), SuccOrder.succ = SuccOrder.succx = y
SuccOrder.ext
/-- Order equipped with a sensible predecessor function. -/ @[ext] class
PredOrder: (α : Type u_1) → [inst : Preorder α] → Type u_1
PredOrder
(
α: Type ?u.162
α
:
Type _: Type (?u.162+1)
Type _
) [
Preorder: Type ?u.165 → Type ?u.165
Preorder
α: Type ?u.162
α
] where /--Predecessor function-/
pred: {α : Type u_1} → [inst : Preorder α] → [self : PredOrder α] → αα
pred
:
α: Type ?u.162
α
α: Type ?u.162
α
/--Proof of basic ordering with respect to `pred`-/
pred_le: ∀ {α : Type u_1} [inst : Preorder α] [self : PredOrder α] (a : α), PredOrder.pred a a
pred_le
: ∀
a: ?m.175
a
,
pred: αα
pred
a: ?m.175
a
a: ?m.175
a
/--Proof of interaction between `pred` and minimal element-/
min_of_le_pred: ∀ {α : Type u_1} [inst : Preorder α] [self : PredOrder α] {a : α}, a PredOrder.pred aIsMin a
min_of_le_pred
{
a: ?m.194
a
} :
a: ?m.194
a
pred: αα
pred
a: ?m.194
a
IsMin: {α : Type ?u.202} → [inst : LE α] → αProp
IsMin
a: ?m.194
a
/--Proof that `pred` satifies ordering invariants betweeen `LT` and `LE`-/
le_pred_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [self : PredOrder α] {a b : α}, a < ba PredOrder.pred b
le_pred_of_lt
{
a: ?m.223
a
b: ?m.226
b
} :
a: ?m.223
a
<
b: ?m.226
b
a: ?m.223
a
pred: αα
pred
b: ?m.226
b
/--Proof that `pred` satifies ordering invariants betweeen `LE` and `LT`-/
le_of_pred_lt: ∀ {α : Type u_1} [inst : Preorder α] [self : PredOrder α] {a b : α}, PredOrder.pred a < ba b
le_of_pred_lt
{
a: ?m.281
a
b: ?m.284
b
} :
pred: αα
pred
a: ?m.281
a
<
b: ?m.284
b
a: ?m.281
a
b: ?m.284
b
#align pred_order
PredOrder: (α : Type u_1) → [inst : Preorder α] → Type u_1
PredOrder
#align pred_order.ext
PredOrder.ext: ∀ {α : Type u_1} {inst : Preorder α} (x y : PredOrder α), PredOrder.pred = PredOrder.predx = y
PredOrder.ext
#align pred_order.ext_iff
PredOrder.ext_iff: ∀ {α : Type u_1} {inst : Preorder α} (x y : PredOrder α), x = y PredOrder.pred = PredOrder.pred
PredOrder.ext_iff
instance: {α : Type u_1} → [inst : Preorder α] → [inst_1 : SuccOrder α] → PredOrder αᵒᵈ
instance
[
Preorder: Type ?u.316 → Type ?u.316
Preorder
α: Type ?u.313
α
] [
SuccOrder: (α : Type ?u.319) → [inst : Preorder α] → Type ?u.319
SuccOrder
α: Type ?u.313
α
] :
PredOrder: (α : Type ?u.327) → [inst : Preorder α] → Type ?u.327
PredOrder
α: Type ?u.313
α
ᵒᵈ where pred :=
toDual: {α : Type ?u.360} → α αᵒᵈ
toDual
SuccOrder.succ: {α : Type ?u.437} → [inst : Preorder α] → [self : SuccOrder α] → αα
SuccOrder.succ
ofDual: {α : Type ?u.465} → αᵒᵈ α
ofDual
pred_le :=

Goals accomplished! 🐙
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α


∀ (a : αᵒᵈ), (toDual SuccOrder.succ ofDual) a a

Goals accomplished! 🐙
min_of_le_pred
h: ?m.543
h
:=

Goals accomplished! 🐙
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α

a✝: αᵒᵈ

h: a✝ (toDual SuccOrder.succ ofDual) a✝


IsMin a✝

Goals accomplished! 🐙
le_pred_of_lt :=

Goals accomplished! 🐙
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α


∀ {a b : αᵒᵈ}, a < ba (toDual SuccOrder.succ ofDual) b
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: αᵒᵈ

h: a < b


a (toDual SuccOrder.succ ofDual) b
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: αᵒᵈ

h: a < b


a (toDual SuccOrder.succ ofDual) b
α: Type ?u.313

inst✝¹: Preorder α

inst✝: SuccOrder α


∀ {a b : αᵒᵈ}, a < ba (toDual SuccOrder.succ ofDual) b

Goals accomplished! 🐙
le_of_pred_lt :=
SuccOrder.le_of_lt_succ: ∀ {α : Type ?u.560} [inst : Preorder α] [self : SuccOrder α] {a b : α}, a < SuccOrder.succ ba b
SuccOrder.le_of_lt_succ
instance: {α : Type u_1} → [inst : Preorder α] → [inst_1 : PredOrder α] → SuccOrder αᵒᵈ
instance
[
Preorder: Type ?u.1255 → Type ?u.1255
Preorder
α: Type ?u.1252
α
] [
PredOrder: (α : Type ?u.1258) → [inst : Preorder α] → Type ?u.1258
PredOrder
α: Type ?u.1252
α
] :
SuccOrder: (α : Type ?u.1266) → [inst : Preorder α] → Type ?u.1266
SuccOrder
α: Type ?u.1252
α
ᵒᵈ where succ :=
toDual: {α : Type ?u.1299} → α αᵒᵈ
toDual
PredOrder.pred: {α : Type ?u.1376} → [inst : Preorder α] → [self : PredOrder α] → αα
PredOrder.pred
ofDual: {α : Type ?u.1405} → αᵒᵈ α
ofDual
le_succ :=

Goals accomplished! 🐙
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α


∀ (a : αᵒᵈ), a (toDual PredOrder.pred ofDual) a

Goals accomplished! 🐙
max_of_succ_le
h: ?m.1483
h
:=

Goals accomplished! 🐙
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α

a✝: αᵒᵈ

h: (toDual PredOrder.pred ofDual) a✝ a✝


IsMax a✝

Goals accomplished! 🐙
succ_le_of_lt :=

Goals accomplished! 🐙
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α


∀ {a b : αᵒᵈ}, a < b(toDual PredOrder.pred ofDual) a b
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α

a, b: αᵒᵈ

h: a < b


(toDual PredOrder.pred ofDual) a b
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α

a, b: αᵒᵈ

h: a < b


(toDual PredOrder.pred ofDual) a b
α: Type ?u.1252

inst✝¹: Preorder α

inst✝: PredOrder α


∀ {a b : αᵒᵈ}, a < b(toDual PredOrder.pred ofDual) a b

Goals accomplished! 🐙
le_of_lt_succ :=
PredOrder.le_of_pred_lt: ∀ {α : Type ?u.1500} [inst : Preorder α] [self : PredOrder α] {a b : α}, PredOrder.pred a < ba b
PredOrder.le_of_pred_lt
section Preorder variable [
Preorder: Type ?u.2147 → Type ?u.2147
Preorder
α: Type ?u.2144
α
] /-- A constructor for `SuccOrder α` usable when `α` has no maximal element. -/ def
SuccOrder.ofSuccLeIffOfLeLtSucc: (succ : αα) → (∀ {a b : α}, succ a b a < b) → (∀ {a b : α}, a < succ ba b) → SuccOrder α
SuccOrder.ofSuccLeIffOfLeLtSucc
(
succ: αα
succ
:
α: Type ?u.2144
α
α: Type ?u.2144
α
) (
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
: ∀ {
a: ?m.2155
a
b: ?m.2158
b
},
succ: αα
succ
a: ?m.2155
a
b: ?m.2158
b
a: ?m.2155
a
<
b: ?m.2158
b
) (
hle_of_lt_succ: ∀ {a b : α}, a < succ ba b
hle_of_lt_succ
: ∀ {
a: ?m.2187
a
b: ?m.2190
b
},
a: ?m.2187
a
<
succ: αα
succ
b: ?m.2190
b
a: ?m.2187
a
b: ?m.2190
b
) :
SuccOrder: (α : Type ?u.2206) → [inst : Preorder α] → Type ?u.2206
SuccOrder
α: Type ?u.2144
α
:= {
succ: αα
succ
le_succ := fun
_: ?m.2226
_
=> (
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
le_rfl: ∀ {α : Type ?u.2234} [inst : Preorder α] {a : α}, a a
le_rfl
).
le: ∀ {α : Type ?u.2255} [inst : Preorder α] {a b : α}, a < ba b
le
max_of_succ_le := fun
ha: ?m.2274
ha
=> (
lt_irrefl: ∀ {α : Type ?u.2276} [inst : Preorder α] (a : α), ¬a < a
lt_irrefl
_: ?m.2277
_
<|
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
ha: ?m.2274
ha
).
elim: ∀ {C : Sort ?u.2288}, FalseC
elim
succ_le_of_lt := fun
h: ?m.2304
h
=>
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h: ?m.2304
h
le_of_lt_succ := fun
h: ?m.2321
h
=>
hle_of_lt_succ: ∀ {a b : α}, a < succ ba b
hle_of_lt_succ
h: ?m.2321
h
} #align succ_order.of_succ_le_iff_of_le_lt_succ
SuccOrder.ofSuccLeIffOfLeLtSucc: {α : Type u_1} → [inst : Preorder α] → (succ : αα) → (∀ {a b : α}, succ a b a < b) → (∀ {a b : α}, a < succ ba b) → SuccOrder α
SuccOrder.ofSuccLeIffOfLeLtSucc
/-- A constructor for `PredOrder α` usable when `α` has no minimal element. -/ def
PredOrder.ofLePredIffOfPredLePred: {α : Type u_1} → [inst : Preorder α] → (pred : αα) → (∀ {a b : α}, a pred b a < b) → (∀ {a b : α}, pred a < ba b) → PredOrder α
PredOrder.ofLePredIffOfPredLePred
(
pred: αα
pred
:
α: Type ?u.2449
α
α: Type ?u.2449
α
) (
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
: ∀ {
a: ?m.2460
a
b: ?m.2463
b
},
a: ?m.2460
a
pred: αα
pred
b: ?m.2463
b
a: ?m.2460
a
<
b: ?m.2463
b
) (
hle_of_pred_lt: ∀ {a b : α}, pred a < ba b
hle_of_pred_lt
: ∀ {
a: ?m.2492
a
b: ?m.2495
b
},
pred: αα
pred
a: ?m.2492
a
<
b: ?m.2495
b
a: ?m.2492
a
b: ?m.2495
b
) :
PredOrder: (α : Type ?u.2511) → [inst : Preorder α] → Type ?u.2511
PredOrder
α: Type ?u.2449
α
:= {
pred: αα
pred
pred_le := fun
_: ?m.2531
_
=> (
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
le_rfl: ∀ {α : Type ?u.2539} [inst : Preorder α] {a : α}, a a
le_rfl
).
le: ∀ {α : Type ?u.2560} [inst : Preorder α] {a b : α}, a < ba b
le
min_of_le_pred := fun
ha: ?m.2579
ha
=> (
lt_irrefl: ∀ {α : Type ?u.2581} [inst : Preorder α] (a : α), ¬a < a
lt_irrefl
_: ?m.2582
_
<|
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
ha: ?m.2579
ha
).
elim: ∀ {C : Sort ?u.2593}, FalseC
elim
le_pred_of_lt := fun
h: ?m.2609
h
=>
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h: ?m.2609
h
le_of_pred_lt := fun
h: ?m.2626
h
=>
hle_of_pred_lt: ∀ {a b : α}, pred a < ba b
hle_of_pred_lt
h: ?m.2626
h
} #align pred_order.of_le_pred_iff_of_pred_le_pred
PredOrder.ofLePredIffOfPredLePred: {α : Type u_1} → [inst : Preorder α] → (pred : αα) → (∀ {a b : α}, a pred b a < b) → (∀ {a b : α}, pred a < ba b) → PredOrder α
PredOrder.ofLePredIffOfPredLePred
end Preorder section LinearOrder variable [
LinearOrder: Type ?u.7313 → Type ?u.7313
LinearOrder
α: Type ?u.2754
α
] /-- A constructor for `SuccOrder α` for `α` a linear order. -/ @[
simps: ∀ {α : Type u_1} [inst : LinearOrder α] (succ : αα) (hn : ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b) (hm : ∀ (a : α), IsMax asucc a = a) (a : α), SuccOrder.succ a = succ a
simps
] def
SuccOrder.ofCore: (succ : αα) → (∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b) → (∀ (a : α), IsMax asucc a = a) → SuccOrder α
SuccOrder.ofCore
(
succ: αα
succ
:
α: Type ?u.2760
α
α: Type ?u.2760
α
) (
hn: ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b
hn
: ∀ {
a: ?m.2771
a
}, ¬
IsMax: {α : Type ?u.2775} → [inst : LE α] → αProp
IsMax
a: ?m.2771
a
→ ∀
b: ?m.2807
b
,
a: ?m.2771
a
<
b: ?m.2807
b
succ: αα
succ
a: ?m.2771
a
b: ?m.2807
b
) (
hm: ∀ (a : α), IsMax asucc a = a
hm
: ∀
a: ?m.3002
a
,
IsMax: {α : Type ?u.3006} → [inst : LE α] → αProp
IsMax
a: ?m.3002
a
succ: αα
succ
a: ?m.3002
a
=
a: ?m.3002
a
) :
SuccOrder: (α : Type ?u.3055) → [inst : Preorder α] → Type ?u.3055
SuccOrder
α: Type ?u.2760
α
:= {
succ: αα
succ
succ_le_of_lt := fun {
a: ?m.3384
a
b: ?m.3387
b
} =>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.3393
h
hab: ?m.3396
hab
=> (
hm: ∀ (a : α), IsMax asucc a = a
hm
a: ?m.3384
a
h: ?m.3393
h
).
symm: ∀ {α : Sort ?u.3398} {a b : α}, a = bb = a
symm
hab: ?m.3396
hab
.
le: ∀ {α : Type ?u.3406} [inst : Preorder α] {a b : α}, a < ba b
le
) fun
h: ?m.3430
h
=> (
hn: ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b
hn
h: ?m.3430
h
b: ?m.3387
b
).
mp: ∀ {a b : Prop}, (a b) → ab
mp
le_succ := fun
a: ?m.3291
a
=>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.3296
h
=> (
hm: ∀ (a : α), IsMax asucc a = a
hm
a: ?m.3291
a
h: ?m.3296
h
).
symm: ∀ {α : Sort ?u.3298} {a b : α}, a = bb = a
symm
.
le: ∀ {α : Type ?u.3305} [inst : Preorder α] {a b : α}, a = ba b
le
) fun
h: ?m.3318
h
=>
le_of_lt: ∀ {α : Type ?u.3320} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
<|

Goals accomplished! 🐙
α: Type ?u.2760

inst✝: LinearOrder α

succ: αα

hn: ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b

hm: ∀ (a : α), IsMax asucc a = a

a: α

h: ¬IsMax a


a < succ a

Goals accomplished! 🐙
le_of_lt_succ := fun {
a: ?m.3450
a
b: ?m.3453
b
}
hab: ?m.3456
hab
=>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.3461
h
=>
hm: ∀ (a : α), IsMax asucc a = a
hm
b: ?m.3453
b
h: ?m.3461
h
hab: ?m.3456
hab
.
le: ∀ {α : Type ?u.3463} [inst : Preorder α] {a b : α}, a < ba b
le
) fun
h: ?m.3482
h
=>

Goals accomplished! 🐙
α: Type ?u.2760

inst✝: LinearOrder α

succ: αα

hn: ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b

hm: ∀ (a : α), IsMax asucc a = a

a, b: α

hab: a < succ b

h: ¬IsMax b


a b

Goals accomplished! 🐙
max_of_succ_le := fun {
a: ?m.3353
a
} =>
not_imp_not: ∀ {a b : Prop}, ¬a¬b ba
not_imp_not
.
mp: ∀ {a b : Prop}, (a b) → ab
mp
fun
h: ?m.3366
h
=>

Goals accomplished! 🐙
α: Type ?u.2760

inst✝: LinearOrder α

succ: αα

hn: ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b

hm: ∀ (a : α), IsMax asucc a = a

a: α

h: ¬IsMax a


¬succ a a

Goals accomplished! 🐙
} #align succ_order.of_core
SuccOrder.ofCore: {α : Type u_1} → [inst : LinearOrder α] → (succ : αα) → (∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b) → (∀ (a : α), IsMax asucc a = a) → SuccOrder α
SuccOrder.ofCore
#align succ_order.of_core_succ
SuccOrder.ofCore_succ: ∀ {α : Type u_1} [inst : LinearOrder α] (succ : αα) (hn : ∀ {a : α}, ¬IsMax a∀ (b : α), a < b succ a b) (hm : ∀ (a : α), IsMax asucc a = a) (a : α), SuccOrder.succ a = succ a
SuccOrder.ofCore_succ
/-- A constructor for `PredOrder α` for `α` a linear order. -/ @[
simps: ∀ {α : Type u_1} [inst : LinearOrder α] (pred : αα) (hn : ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a) (hm : ∀ (a : α), IsMin apred a = a) (a : α), PredOrder.pred a = pred a
simps
] def
PredOrder.ofCore: {α : Type u_1} → [inst : LinearOrder α] → (pred : αα) → (∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a) → (∀ (a : α), IsMin apred a = a) → PredOrder α
PredOrder.ofCore
{
α: ?m.4591
α
} [
LinearOrder: Type ?u.4594 → Type ?u.4594
LinearOrder
α: ?m.4591
α
] (
pred: αα
pred
:
α: ?m.4591
α
α: ?m.4591
α
) (
hn: ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a
hn
: ∀ {
a: ?m.4602
a
}, ¬
IsMin: {α : Type ?u.4606} → [inst : LE α] → αProp
IsMin
a: ?m.4602
a
→ ∀
b: ?m.4638
b
,
b: ?m.4638
b
pred: αα
pred
a: ?m.4602
a
b: ?m.4638
b
<
a: ?m.4602
a
) (
hm: ∀ (a : α), IsMin apred a = a
hm
: ∀
a: ?m.4907
a
,
IsMin: {α : Type ?u.4911} → [inst : LE α] → αProp
IsMin
a: ?m.4907
a
pred: αα
pred
a: ?m.4907
a
=
a: ?m.4907
a
) :
PredOrder: (α : Type ?u.4960) → [inst : Preorder α] → Type ?u.4960
PredOrder
α: ?m.4591
α
:= {
pred: αα
pred
le_pred_of_lt := fun {
a: ?m.5278
a
b: ?m.5281
b
} =>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.5287
h
hab: ?m.5290
hab
=> (
hm: ∀ (a : α), IsMin apred a = a
hm
b: ?m.5281
b
h: ?m.5287
h
).
symm: ∀ {α : Sort ?u.5292} {a b : α}, a = bb = a
symm
hab: ?m.5290
hab
.
le: ∀ {α : Type ?u.5300} [inst : Preorder α] {a b : α}, a < ba b
le
) fun
h: ?m.5324
h
=> (
hn: ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a
hn
h: ?m.5324
h
a: ?m.5278
a
).
mpr: ∀ {a b : Prop}, (a b) → ba
mpr
pred_le := fun
a: ?m.5189
a
=>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.5194
h
=> (
hm: ∀ (a : α), IsMin apred a = a
hm
a: ?m.5189
a
h: ?m.5194
h
).
le: ∀ {α : Type ?u.5196} [inst : Preorder α] {a b : α}, a = ba b
le
) fun
h: ?m.5212
h
=>
le_of_lt: ∀ {α : Type ?u.5214} [inst : Preorder α] {a b : α}, a < ba b
le_of_lt
<|

Goals accomplished! 🐙
α✝: Type ?u.4585

inst✝¹: LinearOrder α✝

α: Type ?u.4594

inst✝: LinearOrder α

pred: αα

hn: ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a

hm: ∀ (a : α), IsMin apred a = a

a: α

h: ¬IsMin a


pred a < a

Goals accomplished! 🐙
le_of_pred_lt := fun {
a: ?m.5344
a
b: ?m.5347
b
}
hab: ?m.5350
hab
=>
by_cases: ∀ {p q : Prop}, (pq) → (¬pq) → q
by_cases
(fun
h: ?m.5355
h
=>
hm: ∀ (a : α), IsMin apred a = a
hm
a: ?m.5344
a
h: ?m.5355
h
hab: ?m.5350
hab
.
le: ∀ {α : Type ?u.5357} [inst : Preorder α] {a b : α}, a < ba b
le
) fun
h: ?m.5376
h
=>

Goals accomplished! 🐙
α✝: Type ?u.4585

inst✝¹: LinearOrder α✝

α: Type ?u.4594

inst✝: LinearOrder α

pred: αα

hn: ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a

hm: ∀ (a : α), IsMin apred a = a

a, b: α

hab: pred a < b

h: ¬IsMin a


a b

Goals accomplished! 🐙
min_of_le_pred := fun {
a: ?m.5247
a
} =>
not_imp_not: ∀ {a b : Prop}, ¬a¬b ba
not_imp_not
.
mp: ∀ {a b : Prop}, (a b) → ab
mp
fun
h: ?m.5260
h
=>

Goals accomplished! 🐙
α✝: Type ?u.4585

inst✝¹: LinearOrder α✝

α: Type ?u.4594

inst✝: LinearOrder α

pred: αα

hn: ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a

hm: ∀ (a : α), IsMin apred a = a

a: α

h: ¬IsMin a


¬a pred a

Goals accomplished! 🐙
} #align pred_order.of_core
PredOrder.ofCore: {α : Type u_1} → [inst : LinearOrder α] → (pred : αα) → (∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a) → (∀ (a : α), IsMin apred a = a) → PredOrder α
PredOrder.ofCore
#align pred_order.of_core_pred
PredOrder.ofCore_pred: ∀ {α : Type u_1} [inst : LinearOrder α] (pred : αα) (hn : ∀ {a : α}, ¬IsMin a∀ (b : α), b pred a b < a) (hm : ∀ (a : α), IsMin apred a = a) (a : α), PredOrder.pred a = pred a
PredOrder.ofCore_pred
/-- A constructor for `SuccOrder α` usable when `α` is a linear order with no maximal element. -/ def
SuccOrder.ofSuccLeIff: (succ : αα) → (∀ {a b : α}, succ a b a < b) → SuccOrder α
SuccOrder.ofSuccLeIff
(
succ: αα
succ
:
α: Type ?u.6669
α
α: Type ?u.6669
α
) (
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
: ∀ {
a: ?m.6680
a
b: ?m.6683
b
},
succ: αα
succ
a: ?m.6680
a
b: ?m.6683
b
a: ?m.6680
a
<
b: ?m.6683
b
) :
SuccOrder: (α : Type ?u.6951) → [inst : Preorder α] → Type ?u.6951
SuccOrder
α: Type ?u.6669
α
:= {
succ: αα
succ
le_succ := fun
_: ?m.7069
_
=> (
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
le_rfl: ∀ {α : Type ?u.7077} [inst : Preorder α] {a : α}, a a
le_rfl
).
le: ∀ {α : Type ?u.7100} [inst : Preorder α] {a b : α}, a < ba b
le
max_of_succ_le := fun
ha: ?m.7119
ha
=> (
lt_irrefl: ∀ {α : Type ?u.7121} [inst : Preorder α] (a : α), ¬a < a
lt_irrefl
_: ?m.7122
_
<|
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
ha: ?m.7119
ha
).
elim: ∀ {C : Sort ?u.7133}, FalseC
elim
succ_le_of_lt := fun
h: ?m.7149
h
=>
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h: ?m.7149
h
le_of_lt_succ := fun {
_: ?m.7164
_
_: ?m.7167
_
}
h: ?m.7170
h
=>
le_of_not_lt: ∀ {α : Type ?u.7172} [inst : LinearOrder α] {a b : α}, ¬b < aa b
le_of_not_lt
((
not_congr: ∀ {a b : Prop}, (a b) → (¬a ¬b)
not_congr
hsucc_le_iff: ∀ {a b : α}, succ a b a < b
hsucc_le_iff
).
1: ∀ {a b : Prop}, (a b) → ab
1
h: ?m.7170
h
.
not_le: ∀ {α : Type ?u.7197} [inst : Preorder α] {a b : α}, a < b¬b a
not_le
) } #align succ_order.of_succ_le_iff
SuccOrder.ofSuccLeIff: {α : Type u_1} → [inst : LinearOrder α] → (succ : αα) → (∀ {a b : α}, succ a b a < b) → SuccOrder α
SuccOrder.ofSuccLeIff
/-- A constructor for `PredOrder α` usable when `α` is a linear order with no minimal element. -/ def
PredOrder.ofLePredIff: (pred : αα) → (∀ {a b : α}, a pred b a < b) → PredOrder α
PredOrder.ofLePredIff
(
pred: αα
pred
:
α: Type ?u.7310
α
α: Type ?u.7310
α
) (
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
: ∀ {
a: ?m.7321
a
b: ?m.7324
b
},
a: ?m.7321
a
pred: αα
pred
b: ?m.7324
b
a: ?m.7321
a
<
b: ?m.7324
b
) :
PredOrder: (α : Type ?u.7592) → [inst : Preorder α] → Type ?u.7592
PredOrder
α: Type ?u.7310
α
:= { pred pred_le := fun
_: ?m.7710
_
=> (
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
le_rfl: ∀ {α : Type ?u.7718} [inst : Preorder α] {a : α}, a a
le_rfl
).
le: ∀ {α : Type ?u.7741} [inst : Preorder α] {a b : α}, a < ba b
le
min_of_le_pred := fun
ha: ?m.7760
ha
=> (
lt_irrefl: ∀ {α : Type ?u.7762} [inst : Preorder α] (a : α), ¬a < a
lt_irrefl
_: ?m.7763
_
<|
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
ha: ?m.7760
ha
).
elim: ∀ {C : Sort ?u.7774}, FalseC
elim
le_pred_of_lt := fun
h: ?m.7790
h
=>
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h: ?m.7790
h
le_of_pred_lt := fun {
_: ?m.7805
_
_: ?m.7808
_
}
h: ?m.7811
h
=>
le_of_not_lt: ∀ {α : Type ?u.7813} [inst : LinearOrder α] {a b : α}, ¬b < aa b
le_of_not_lt
((
not_congr: ∀ {a b : Prop}, (a b) → (¬a ¬b)
not_congr
hle_pred_iff: ∀ {a b : α}, a pred b a < b
hle_pred_iff
).
1: ∀ {a b : Prop}, (a b) → ab
1
h: ?m.7811
h
.
not_le: ∀ {α : Type ?u.7838} [inst : Preorder α] {a b : α}, a < b¬b a
not_le
) } #align pred_order.of_le_pred_iff
PredOrder.ofLePredIff: {α : Type u_1} → [inst : LinearOrder α] → (pred : αα) → (∀ {a b : α}, a pred b a < b) → PredOrder α
PredOrder.ofLePredIff
end LinearOrder /-! ### Successor order -/ namespace Order section Preorder variable [
Preorder: Type ?u.9750 → Type ?u.9750
Preorder
α: Type ?u.7969
α
] [
SuccOrder: (α : Type ?u.10878) → [inst : Preorder α] → Type ?u.10878
SuccOrder
α: Type ?u.13227
α
] {
a: α
a
b: α
b
:
α: Type ?u.7951
α
} /-- The successor of an element. If `a` is not maximal, then `succ a` is the least element greater than `a`. If `a` is maximal, then `succ a = a`. -/ def
succ: αα
succ
:
α: Type ?u.7969
α
α: Type ?u.7969
α
:=
SuccOrder.succ: {α : Type ?u.7990} → [inst : Preorder α] → [self : SuccOrder α] → αα
SuccOrder.succ
#align order.succ
Order.succ: {α : Type u_1} → [inst : Preorder α] → [inst : SuccOrder α] → αα
Order.succ
theorem
le_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a succ a
le_succ
: ∀
a: α
a
:
α: Type ?u.8077
α
,
a: α
a
succ: {α : Type ?u.8099} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
:=
SuccOrder.le_succ: ∀ {α : Type ?u.8124} [inst : Preorder α] [self : SuccOrder α] (a : α), a SuccOrder.succ a
SuccOrder.le_succ
#align order.le_succ
Order.le_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a succ a
Order.le_succ
theorem
max_of_succ_le: ∀ {a : α}, succ a aIsMax a
max_of_succ_le
{
a: α
a
:
α: Type ?u.8173
α
} :
succ: {α : Type ?u.8195} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
a: α
a
IsMax: {α : Type ?u.8219} → [inst : LE α] → αProp
IsMax
a: α
a
:=
SuccOrder.max_of_succ_le: ∀ {α : Type ?u.8240} [inst : Preorder α] [self : SuccOrder α] {a : α}, SuccOrder.succ a aIsMax a
SuccOrder.max_of_succ_le
#align order.max_of_succ_le
Order.max_of_succ_le: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, succ a aIsMax a
Order.max_of_succ_le
theorem
succ_le_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < bsucc a b
succ_le_of_lt
{
a: α
a
b: α
b
:
α: Type ?u.8296
α
} :
a: α
a
<
b: α
b
succ: {α : Type ?u.8334} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
b: α
b
:=
SuccOrder.succ_le_of_lt: ∀ {α : Type ?u.8360} [inst : Preorder α] [self : SuccOrder α] {a b : α}, a < bSuccOrder.succ a b
SuccOrder.succ_le_of_lt
#align order.succ_le_of_lt
Order.succ_le_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < bsucc a b
Order.succ_le_of_lt
theorem
le_of_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < succ ba b
le_of_lt_succ
{
a: α
a
b: α
b
:
α: Type ?u.8415
α
} :
a: α
a
<
succ: {α : Type ?u.8439} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
b: α
b
:=
SuccOrder.le_of_lt_succ: ∀ {α : Type ?u.8479} [inst : Preorder α] [self : SuccOrder α] {a b : α}, a < SuccOrder.succ ba b
SuccOrder.le_of_lt_succ
#align order.le_of_lt_succ
Order.le_of_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < succ ba b
Order.le_of_lt_succ
@[simp] theorem
succ_le_iff_isMax: succ a a IsMax a
succ_le_iff_isMax
:
succ: {α : Type ?u.8551} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
a: α
a
IsMax: {α : Type ?u.8574} → [inst : LE α] → αProp
IsMax
a: α
a
:= ⟨
max_of_succ_le: ∀ {α : Type ?u.8586} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, succ a aIsMax a
max_of_succ_le
, fun
h: ?m.8636
h
=>
h: ?m.8636
h
<|
le_succ: ∀ {α : Type ?u.8639} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a succ a
le_succ
_: ?m.8640
_
#align order.succ_le_iff_is_max
Order.succ_le_iff_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, succ a a IsMax a
Order.succ_le_iff_isMax
@[simp] theorem
lt_succ_iff_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, a < succ a ¬IsMax a
lt_succ_iff_not_isMax
:
a: α
a
<
succ: {α : Type ?u.8714} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
↔ ¬
IsMax: {α : Type ?u.8737} → [inst : LE α] → αProp
IsMax
a: α
a
:= ⟨
not_isMax_of_lt: ∀ {α : Type ?u.8756} [inst : Preorder α] {a b : α}, a < b¬IsMax a
not_isMax_of_lt
, fun
ha: ?m.8788
ha
=> (
le_succ: ∀ {α : Type ?u.8790} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a succ a
le_succ
a: α
a
).
lt_of_not_le: ∀ {α : Type ?u.8799} [inst : Preorder α] {a b : α}, a b¬b aa < b
lt_of_not_le
fun
h: ?m.8815
h
=>
ha: ?m.8788
ha
<|
max_of_succ_le: ∀ {α : Type ?u.8817} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, succ a aIsMax a
max_of_succ_le
h: ?m.8815
h
#align order.lt_succ_iff_not_is_max
Order.lt_succ_iff_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, a < succ a ¬IsMax a
Order.lt_succ_iff_not_isMax
alias
lt_succ_iff_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, a < succ a ¬IsMax a
lt_succ_iff_not_isMax
↔ _
lt_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
lt_succ_of_not_isMax
#align order.lt_succ_of_not_is_max
Order.lt_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
Order.lt_succ_of_not_isMax
theorem
wcovby_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a ⩿ succ a
wcovby_succ
(
a: α
a
:
α: Type ?u.8890
α
) :
a: α
a
⩿
succ: {α : Type ?u.8926} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
:= ⟨
le_succ: ∀ {α : Type ?u.8969} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a succ a
le_succ
a: α
a
, fun
_: ?m.8983
_
hb: ?m.8986
hb
=> (
succ_le_of_lt: ∀ {α : Type ?u.8988} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < bsucc a b
succ_le_of_lt
hb: ?m.8986
hb
).
not_lt: ∀ {α : Type ?u.8998} [inst : Preorder α] {a b : α}, a b¬b < a
not_lt
#align order.wcovby_succ
Order.wcovby_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a ⩿ succ a
Order.wcovby_succ
theorem
covby_succ_of_not_isMax: ¬IsMax aa succ a
covby_succ_of_not_isMax
(
h: ¬IsMax a
h
: ¬
IsMax: {α : Type ?u.9046} → [inst : LE α] → αProp
IsMax
a: α
a
) :
a: α
a
succ: {α : Type ?u.9075} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
:= (
wcovby_succ: ∀ {α : Type ?u.9113} [inst : Preorder α] [inst_1 : SuccOrder α] (a : α), a ⩿ succ a
wcovby_succ
a: α
a
).
covby_of_lt: ∀ {α : Type ?u.9126} [inst : Preorder α] {a b : α}, a ⩿ ba < ba b
covby_of_lt
<|
lt_succ_of_not_isMax: ∀ {α : Type ?u.9145} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
lt_succ_of_not_isMax
h: ¬IsMax a
h
#align order.covby_succ_of_not_is_max
Order.covby_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa succ a
Order.covby_succ_of_not_isMax
theorem
lt_succ_iff_of_not_isMax: ¬IsMax a → (b < succ a b a)
lt_succ_iff_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.9203} → [inst : LE α] → αProp
IsMax
a: α
a
) :
b: α
b
<
succ: {α : Type ?u.9219} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
b: α
b
a: α
a
:= ⟨
le_of_lt_succ: ∀ {α : Type ?u.9252} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < succ ba b
le_of_lt_succ
, fun
h: ?m.9298
h
=>
h: ?m.9298
h
.
trans_lt: ∀ {α : Type ?u.9300} [inst : Preorder α] {a b c : α}, a bb < ca < c
trans_lt
<|
lt_succ_of_not_isMax: ∀ {α : Type ?u.9317} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
lt_succ_of_not_isMax
ha: ¬IsMax a
ha
#align order.lt_succ_iff_of_not_is_max
Order.lt_succ_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (b < succ a b a)
Order.lt_succ_iff_of_not_isMax
theorem
succ_le_iff_of_not_isMax: ¬IsMax a → (succ a b a < b)
succ_le_iff_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.9371} → [inst : LE α] → αProp
IsMax
a: α
a
) :
succ: {α : Type ?u.9387} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
b: α
b
a: α
a
<
b: α
b
:= ⟨(
lt_succ_of_not_isMax: ∀ {α : Type ?u.9420} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
lt_succ_of_not_isMax
ha: ¬IsMax a
ha
).
trans_le: ∀ {α : Type ?u.9439} [inst : Preorder α] {a b c : α}, a < bb ca < c
trans_le
,
succ_le_of_lt: ∀ {α : Type ?u.9463} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a < bsucc a b
succ_le_of_lt
#align order.succ_le_iff_of_not_is_max
Order.succ_le_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (succ a b a < b)
Order.succ_le_iff_of_not_isMax
theorem
succ_lt_succ_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a¬IsMax b → (succ a < succ b a < b)
succ_lt_succ_iff_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.9518} → [inst : LE α] → αProp
IsMax
a: α
a
) (
hb: ¬IsMax b
hb
: ¬
IsMax: {α : Type ?u.9533} → [inst : LE α] → αProp
IsMax
b: α
b
) :
succ: {α : Type ?u.9539} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
<
succ: {α : Type ?u.9550} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
<
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a < succ b a < b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a < succ b a < b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a b a < b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a < succ b a < b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


a < b a < b

Goals accomplished! 🐙
#align order.succ_lt_succ_iff_of_not_is_max
Order.succ_lt_succ_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a¬IsMax b → (succ a < succ b a < b)
Order.succ_lt_succ_iff_of_not_isMax
theorem
succ_le_succ_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a¬IsMax b → (succ a succ b a b)
succ_le_succ_iff_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.9645} → [inst : LE α] → αProp
IsMax
a: α
a
) (
hb: ¬IsMax b
hb
: ¬
IsMax: {α : Type ?u.9660} → [inst : LE α] → αProp
IsMax
b: α
b
) :
succ: {α : Type ?u.9666} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
succ: {α : Type ?u.9677} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a succ b a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a succ b a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


a < succ b a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


succ a succ b a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a

hb: ¬IsMax b


a b a b

Goals accomplished! 🐙
#align order.succ_le_succ_iff_of_not_is_max
Order.succ_le_succ_iff_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a¬IsMax b → (succ a succ b a b)
Order.succ_le_succ_iff_of_not_isMax
@[simp, mono] theorem
succ_le_succ: a bsucc a succ b
succ_le_succ
(
h: a b
h
:
a: α
a
b: α
b
) :
succ: {α : Type ?u.9781} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
succ: {α : Type ?u.9792} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b


α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b


α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: b a


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: ¬b a


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: b a


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: b a


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: ¬b a


neg

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b


pos
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: ¬b a


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: IsMax b

hba: ¬b a


neg

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b


α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
a < succ b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

h: a b

hb: ¬IsMax b


neg
a b
#align order.succ_le_succ
Order.succ_le_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a bsucc a succ b
Order.succ_le_succ
theorem
succ_mono: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α], Monotone succ
succ_mono
:
Monotone: {α : Type ?u.10270} → {β : Type ?u.10269} → [inst : Preorder α] → [inst : Preorder β] → (αβ) → Prop
Monotone
(
succ: {α : Type ?u.10304} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
:
α: Type ?u.10251
α
α: Type ?u.10251
α
) := fun
_: ?m.10340
_
_: ?m.10343
_
=>
succ_le_succ: ∀ {α : Type ?u.10345} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, a bsucc a succ b
succ_le_succ
#align order.succ_mono
Order.succ_mono: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α], Monotone succ
Order.succ_mono
theorem
le_succ_iterate: ∀ (k : ) (x : α), x (succ^[k]) x
le_succ_iterate
(
k:
k
:
: Type
) (
x: α
x
:
α: Type ?u.10396
α
) :
x: α
x
≤ (
succ: {α : Type ?u.10421} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
k:
k
])
x: α
x
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x (succ^[k]) x
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x (succ^[k]) x
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x = (id^[k]) x

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


(id^[k]) x
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


(id^[k]) x
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

k:

x: α


x (succ^[k]) x

Goals accomplished! 🐙
#align order.le_succ_iterate
Order.le_succ_iterate: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] (k : ) (x : α), x (succ^[k]) x
Order.le_succ_iterate
theorem
isMax_iterate_succ_of_eq_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α} {n m : }, (succ^[n]) a = (succ^[m]) an < mIsMax ((succ^[n]) a)
isMax_iterate_succ_of_eq_of_lt
{
n:
n
m:
m
:
: Type
} (
h_eq: (succ^[n]) a = (succ^[m]) a
h_eq
: (
succ: {α : Type ?u.10897} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
n:
n
])
a: α
a
= (
succ: {α : Type ?u.10947} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
m:
m
])
a: α
a
) (
h_lt: n < m
h_lt
:
n:
n
<
m:
m
) :
IsMax: {α : Type ?u.10997} → [inst : LE α] → αProp
IsMax
((
succ: {α : Type ?u.11016} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
n:
n
])
a: α
a
) :=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) (succ^[m]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) (succ^[m]) a

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) = (succ^[n + 1]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) = (succ^[n + 1]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) = (succ succ^[n]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) = (succ^[n + 1]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


succ ((succ^[n]) a) = succ ((succ^[n]) a)

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m

this: succ ((succ^[n]) a) = (succ^[n + 1]) a


succ ((succ^[n]) a) (succ^[m]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m

this: succ ((succ^[n]) a) = (succ^[n + 1]) a


(succ^[n + 1]) a (succ^[m]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m

this: succ ((succ^[n]) a) = (succ^[n + 1]) a


(succ^[n + 1]) a (succ^[m]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m

this: succ ((succ^[n]) a) = (succ^[n + 1]) a

h_le: n + 1 m


(succ^[n + 1]) a (succ^[m]) a
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_lt: n < m


IsMax ((succ^[n]) a)

Goals accomplished! 🐙
#align order.is_max_iterate_succ_of_eq_of_lt
Order.isMax_iterate_succ_of_eq_of_lt: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α} {n m : }, (succ^[n]) a = (succ^[m]) an < mIsMax ((succ^[n]) a)
Order.isMax_iterate_succ_of_eq_of_lt
theorem
isMax_iterate_succ_of_eq_of_ne: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α} {n m : }, (succ^[n]) a = (succ^[m]) an mIsMax ((succ^[n]) a)
isMax_iterate_succ_of_eq_of_ne
{
n:
n
m:
m
:
: Type
} (
h_eq: (succ^[n]) a = (succ^[m]) a
h_eq
: (
succ: {α : Type ?u.11647} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
n:
n
])
a: α
a
= (
succ: {α : Type ?u.11697} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
m:
m
])
a: α
a
) (
h_ne: n m
h_ne
:
n:
n
m:
m
) :
IsMax: {α : Type ?u.11743} → [inst : LE α] → αProp
IsMax
((
succ: {α : Type ?u.11762} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
^[
n:
n
])
a: α
a
) :=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: n m


inl
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: n m


inl
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: n m


inl
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m


IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[m]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[m]) a)
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

n, m:

h_eq: (succ^[n]) a = (succ^[m]) a

h_ne: n m

h: m n


inr
IsMax ((succ^[n]) a)

Goals accomplished! 🐙
#align order.is_max_iterate_succ_of_eq_of_ne
Order.isMax_iterate_succ_of_eq_of_ne: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α} {n m : }, (succ^[n]) a = (succ^[m]) an mIsMax ((succ^[n]) a)
Order.isMax_iterate_succ_of_eq_of_ne
theorem
Iio_succ_of_not_isMax: ¬IsMax aIio (succ a) = Iic a
Iio_succ_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.12201} → [inst : LE α] → αProp
IsMax
a: α
a
) :
Iio: {α : Type ?u.12217} → [inst : Preorder α] → αSet α
Iio
(
succ: {α : Type ?u.12220} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
) =
Iic: {α : Type ?u.12249} → [inst : Preorder α] → αSet α
Iic
a: α
a
:=
Set.ext: ∀ {α : Type ?u.12257} {a b : Set α}, (∀ (x : α), x a x b) → a = b
Set.ext
fun
_: ?m.12266
_
=>
lt_succ_iff_of_not_isMax: ∀ {α : Type ?u.12268} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (b < succ a b a)
lt_succ_iff_of_not_isMax
ha: ¬IsMax a
ha
#align order.Iio_succ_of_not_is_max
Order.Iio_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aIio (succ a) = Iic a
Order.Iio_succ_of_not_isMax
theorem
Ici_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aIci (succ a) = Ioi a
Ici_succ_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.12339} → [inst : LE α] → αProp
IsMax
a: α
a
) :
Ici: {α : Type ?u.12355} → [inst : Preorder α] → αSet α
Ici
(
succ: {α : Type ?u.12358} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
) =
Ioi: {α : Type ?u.12387} → [inst : Preorder α] → αSet α
Ioi
a: α
a
:=
Set.ext: ∀ {α : Type ?u.12395} {a b : Set α}, (∀ (x : α), x a x b) → a = b
Set.ext
fun
_: ?m.12404
_
=>
succ_le_iff_of_not_isMax: ∀ {α : Type ?u.12406} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (succ a b a < b)
succ_le_iff_of_not_isMax
ha: ¬IsMax a
ha
#align order.Ici_succ_of_not_is_max
Order.Ici_succ_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aIci (succ a) = Ioi a
Order.Ici_succ_of_not_isMax
theorem
Ico_succ_right_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax bIco a (succ b) = Icc a b
Ico_succ_right_of_not_isMax
(
hb: ¬IsMax b
hb
: ¬
IsMax: {α : Type ?u.12477} → [inst : LE α] → αProp
IsMax
b: α
b
) :
Ico: {α : Type ?u.12493} → [inst : Preorder α] → ααSet α
Ico
a: α
a
(
succ: {α : Type ?u.12496} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
) =
Icc: {α : Type ?u.12525} → [inst : Preorder α] → ααSet α
Icc
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ico a (succ b) = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ico a (succ b) = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ici a Iio (succ b) = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ico a (succ b) = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ici a Iic b = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ico a (succ b) = Icc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Icc a b = Icc a b

Goals accomplished! 🐙
#align order.Ico_succ_right_of_not_is_max
Order.Ico_succ_right_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax bIco a (succ b) = Icc a b
Order.Ico_succ_right_of_not_isMax
theorem
Ioo_succ_right_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax bIoo a (succ b) = Ioc a b
Ioo_succ_right_of_not_isMax
(
hb: ¬IsMax b
hb
: ¬
IsMax: {α : Type ?u.12669} → [inst : LE α] → αProp
IsMax
b: α
b
) :
Ioo: {α : Type ?u.12685} → [inst : Preorder α] → ααSet α
Ioo
a: α
a
(
succ: {α : Type ?u.12688} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
) =
Ioc: {α : Type ?u.12717} → [inst : Preorder α] → ααSet α
Ioc
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioo a (succ b) = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioo a (succ b) = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioi a Iio (succ b) = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioo a (succ b) = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioi a Iic b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioo a (succ b) = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

hb: ¬IsMax b


Ioc a b = Ioc a b

Goals accomplished! 🐙
#align order.Ioo_succ_right_of_not_is_max
Order.Ioo_succ_right_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax bIoo a (succ b) = Ioc a b
Order.Ioo_succ_right_of_not_isMax
theorem
Icc_succ_left_of_not_isMax: ¬IsMax aIcc (succ a) b = Ioc a b
Icc_succ_left_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.12861} → [inst : LE α] → αProp
IsMax
a: α
a
) :
Icc: {α : Type ?u.12877} → [inst : Preorder α] → ααSet α
Icc
(
succ: {α : Type ?u.12880} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
)
b: α
b
=
Ioc: {α : Type ?u.12909} → [inst : Preorder α] → ααSet α
Ioc
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Icc (succ a) b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Icc (succ a) b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ici (succ a) Iic b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Icc (succ a) b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ioi a Iic b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Icc (succ a) b = Ioc a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ioc a b = Ioc a b

Goals accomplished! 🐙
#align order.Icc_succ_left_of_not_is_max
Order.Icc_succ_left_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax aIcc (succ a) b = Ioc a b
Order.Icc_succ_left_of_not_isMax
theorem
Ico_succ_left_of_not_isMax: ¬IsMax aIco (succ a) b = Ioo a b
Ico_succ_left_of_not_isMax
(
ha: ¬IsMax a
ha
: ¬
IsMax: {α : Type ?u.13053} → [inst : LE α] → αProp
IsMax
a: α
a
) :
Ico: {α : Type ?u.13069} → [inst : Preorder α] → ααSet α
Ico
(
succ: {α : Type ?u.13072} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
)
b: α
b
=
Ioo: {α : Type ?u.13101} → [inst : Preorder α] → ααSet α
Ioo
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ico (succ a) b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ico (succ a) b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ici (succ a) Iio b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ico (succ a) b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ioi a Iio b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ico (succ a) b = Ioo a b
α: Type u_1

inst✝¹: Preorder α

inst✝: SuccOrder α

a, b: α

ha: ¬IsMax a


Ioo a b = Ioo a b

Goals accomplished! 🐙
#align order.Ico_succ_left_of_not_is_max
Order.Ico_succ_left_of_not_isMax: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax aIco (succ a) b = Ioo a b
Order.Ico_succ_left_of_not_isMax
section NoMaxOrder variable [
NoMaxOrder: (α : Type ?u.14760) → [inst : LT α] → Prop
NoMaxOrder
α: Type ?u.13227
α
] theorem
lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] [inst_2 : NoMaxOrder α] (a : α), a < succ a
lt_succ
(
a: α
a
:
α: Type ?u.13257
α
) :
a: α
a
<
succ: {α : Type ?u.13290} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
:=
lt_succ_of_not_isMax: ∀ {α : Type ?u.13316} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa < succ a
lt_succ_of_not_isMax
<|
not_isMax: ∀ {α : Type ?u.13351} [inst : Preorder α] [inst_1 : NoMaxOrder α] (a : α), ¬IsMax a
not_isMax
a: α
a
#align order.lt_succ
Order.lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] [inst_2 : NoMaxOrder α] (a : α), a < succ a
Order.lt_succ
@[simp] theorem
lt_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], a < succ b a b
lt_succ_iff
:
a: α
a
<
succ: {α : Type ?u.13405} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
b: α
b
:=
lt_succ_iff_of_not_isMax: ∀ {α : Type ?u.13439} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (b < succ a b a)
lt_succ_iff_of_not_isMax
<|
not_isMax: ∀ {α : Type ?u.13477} [inst : Preorder α] [inst_1 : NoMaxOrder α] (a : α), ¬IsMax a
not_isMax
b: α
b
#align order.lt_succ_iff
Order.lt_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], a < succ b a b
Order.lt_succ_iff
@[simp] theorem
succ_le_iff: succ a b a < b
succ_le_iff
:
succ: {α : Type ?u.13562} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
b: α
b
a: α
a
<
b: α
b
:=
succ_le_iff_of_not_isMax: ∀ {α : Type ?u.13596} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α}, ¬IsMax a → (succ a b a < b)
succ_le_iff_of_not_isMax
<|
not_isMax: ∀ {α : Type ?u.13634} [inst : Preorder α] [inst_1 : NoMaxOrder α] (a : α), ¬IsMax a
not_isMax
a: α
a
#align order.succ_le_iff
Order.succ_le_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a b a < b
Order.succ_le_iff
theorem
succ_le_succ_iff: succ a succ b a b
succ_le_succ_iff
:
succ: {α : Type ?u.13719} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
succ: {α : Type ?u.13732} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝²: Preorder α

inst✝¹: SuccOrder α

a, b: α

inst✝: NoMaxOrder α


succ a succ b a b

Goals accomplished! 🐙
#align order.succ_le_succ_iff
Order.succ_le_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a succ b a b
Order.succ_le_succ_iff
theorem
succ_lt_succ_iff: succ a < succ b a < b
succ_lt_succ_iff
:
succ: {α : Type ?u.14138} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
<
succ: {α : Type ?u.14151} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
b: α
b
a: α
a
<
b: α
b
:=

Goals accomplished! 🐙
α: Type u_1

inst✝²: Preorder α

inst✝¹: SuccOrder α

a, b: α

inst✝: NoMaxOrder α


succ a < succ b a < b

Goals accomplished! 🐙
#align order.succ_lt_succ_iff
Order.succ_lt_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a < succ b a < b
Order.succ_lt_succ_iff
alias
succ_le_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a succ b a b
succ_le_succ_iff
le_of_succ_le_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a succ ba b
le_of_succ_le_succ
_ #align order.le_of_succ_le_succ
Order.le_of_succ_le_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a succ ba b
Order.le_of_succ_le_succ
alias
succ_lt_succ_iff: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a < succ b a < b
succ_lt_succ_iff
lt_of_succ_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a < succ ba < b
lt_of_succ_lt_succ
succ_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], a < bsucc a < succ b
succ_lt_succ
#align order.lt_of_succ_lt_succ
Order.lt_of_succ_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], succ a < succ ba < b
Order.lt_of_succ_lt_succ
#align order.succ_lt_succ
Order.succ_lt_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], a < bsucc a < succ b
Order.succ_lt_succ
theorem
succ_strictMono: StrictMono succ
succ_strictMono
:
StrictMono: {α : Type ?u.14593} → {β : Type ?u.14592} → [inst : Preorder α] → [inst : Preorder β] → (αβ) → Prop
StrictMono
(
succ: {α : Type ?u.14627} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
:
α: Type ?u.14562
α
α: Type ?u.14562
α
) := fun
_: ?m.14663
_
_: ?m.14666
_
=>
succ_lt_succ: ∀ {α : Type ?u.14668} [inst : Preorder α] [inst_1 : SuccOrder α] {a b : α} [inst_2 : NoMaxOrder α], a < bsucc a < succ b
succ_lt_succ
#align order.succ_strict_mono
Order.succ_strictMono: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] [inst_2 : NoMaxOrder α], StrictMono succ
Order.succ_strictMono
theorem
covby_succ: ∀ (a : α), a succ a
covby_succ
(
a: α
a
:
α: Type ?u.14742
α
) :
a: α
a
succ: {α : Type ?u.14788} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
:=
covby_succ_of_not_isMax: ∀ {α : Type ?u.14829} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aa succ a
covby_succ_of_not_isMax
<|
not_isMax: ∀ {α : Type ?u.14864} [inst : Preorder α] [inst_1 : NoMaxOrder α] (a : α), ¬IsMax a
not_isMax
a: α
a
#align order.covby_succ
Order.covby_succ: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SuccOrder α] [inst_2 : NoMaxOrder α] (a : α), a succ a
Order.covby_succ
@[simp] theorem
Iio_succ: ∀ (a : α), Iio (succ a) = Iic a
Iio_succ
(
a: α
a
:
α: Type ?u.14887
α
) :
Iio: {α : Type ?u.14920} → [inst : Preorder α] → αSet α
Iio
(
succ: {α : Type ?u.14923} → [inst : Preorder α] → [inst : SuccOrder α] → αα
succ
a: α
a
) =
Iic: {α : Type ?u.14954} → [inst : Preorder α] → αSet α
Iic
a: α
a
:=
Iio_succ_of_not_isMax: ∀ {α : Type ?u.14962} [inst : Preorder α] [inst_1 : SuccOrder α] {a : α}, ¬IsMax aIio (succ a) = Iic a
</