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) 2018 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel

! This file was ported from Lean 3 source module order.conditionally_complete_lattice.basic
! leanprover-community/mathlib commit 29cb56a7b35f72758b05a30490e1f10bd62c35c1
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Order.Bounds.Basic
import Mathlib.Order.WellFounded
import Mathlib.Data.Set.Intervals.Basic
import Mathlib.Data.Set.Lattice

/-!
# Theory of conditionally complete lattices.

A conditionally complete lattice is a lattice in which every non-empty bounded subset `s`
has a least upper bound and a greatest lower bound, denoted below by `sSup s` and `sInf s`.
Typical examples are `ℝ`, `ℕ`, and `ℤ` with their usual orders.

The theory is very comparable to the theory of complete lattices, except that suitable
boundedness and nonemptiness assumptions have to be added to most statements.
We introduce two predicates `BddAbove` and `BddBelow` to express this boundedness, prove
their basic properties, and then go on to prove most useful properties of `sSup` and `sInf`
in conditionally complete lattices.

To differentiate the statements between complete lattices and conditionally complete
lattices, we prefix `sInf` and `sSup` in the statements by `c`, giving `csInf` and `csSup`.
For instance, `sInf_le` is a statement in complete lattices ensuring `sInf s ≤ x`,
while `csInf_le` is the same statement in conditionally complete lattices
with an additional assumption that `s` is bounded below.
-/


open Function OrderDual Set

variable {
α: Type ?u.83856
α
β: Type ?u.17
β
γ: Type ?u.20
γ
:
Type _: Type (?u.41916+1)
Type _
} {
ι: Sort ?u.85427
ι
:
Sort _: Type ?u.11
Sort
Sort _: Type ?u.11
_
} section /-! Extension of `sSup` and `sInf` from a preorder `α` to `WithTop α` and `WithBot α` -/ open Classical noncomputable
instance: {α : Type u_1} → [inst : Preorder α] → [inst : SupSet α] → SupSet (WithTop α)
instance
{
α: Type ?u.26
α
:
Type _: Type (?u.26+1)
Type _
} [
Preorder: Type ?u.29 → Type ?u.29
Preorder
α: Type ?u.26
α
] [
SupSet: Type ?u.32 → Type ?u.32
SupSet
α: Type ?u.26
α
] :
SupSet: Type ?u.35 → Type ?u.35
SupSet
(
WithTop: Type ?u.36 → Type ?u.36
WithTop
α: Type ?u.26
α
) := ⟨fun
S: ?m.47
S
=> if
: ?m.55
S: ?m.47
S
then
: ?m.106
else if
BddAbove: {α : Type ?u.133} → [inst : Preorder α] → Set αProp
BddAbove
((fun (
a: α
a
:
α: Type ?u.26
α
) ↦ ↑
a: α
a
) ⁻¹'
S: ?m.47
S
:
Set: Type ?u.137 → Type ?u.137
Set
α: Type ?u.26
α
) then ↑(
sSup: {α : Type ?u.164} → [self : SupSet α] → Set αα
sSup
((fun (
a: α
a
:
α: Type ?u.26
α
) ↦ (
a: α
a
:
WithTop: Type ?u.177 → Type ?u.177
WithTop
α: Type ?u.26
α
)) ⁻¹'
S: ?m.47
S
:
Set: Type ?u.168 → Type ?u.168
Set
α: Type ?u.26
α
)) else
: ?m.318
noncomputable
instance: {α : Type u_1} → [inst : InfSet α] → InfSet (WithTop α)
instance
{
α: Type ?u.440
α
:
Type _: Type (?u.440+1)
Type _
} [
InfSet: Type ?u.443 → Type ?u.443
InfSet
α: Type ?u.440
α
] :
InfSet: Type ?u.446 → Type ?u.446
InfSet
(
WithTop: Type ?u.447 → Type ?u.447
WithTop
α: Type ?u.440
α
) := ⟨fun
S: ?m.457
S
=> if
S: ?m.457
S
⊆ {
: ?m.476
} then
: ?m.532
else ↑(
sInf: {α : Type ?u.559} → [self : InfSet α] → Set αα
sInf
((fun (
a: α
a
:
α: Type ?u.440
α
) ↦ ↑
a: α
a
) ⁻¹'
S: ?m.457
S
:
Set: Type ?u.563 → Type ?u.563
Set
α: Type ?u.440
α
))⟩ noncomputable
instance: {α : Type u_1} → [inst : SupSet α] → SupSet (WithBot α)
instance
{
α: Type ?u.757
α
:
Type _: Type (?u.757+1)
Type _
} [
SupSet: Type ?u.760 → Type ?u.760
SupSet
α: Type ?u.757
α
] :
SupSet: Type ?u.763 → Type ?u.763
SupSet
(
WithBot: Type ?u.764 → Type ?u.764
WithBot
α: Type ?u.757
α
) := ⟨(@
instInfSetWithTop: {α : Type ?u.773} → [inst : InfSet α] → InfSet (WithTop α)
instInfSetWithTop
α: Type ?u.757
α
ᵒᵈ _).
sInf: {α : Type ?u.790} → [self : InfSet α] → Set αα
sInf
noncomputable
instance: {α : Type u_1} → [inst : Preorder α] → [inst : InfSet α] → InfSet (WithBot α)
instance
{
α: Type ?u.824
α
:
Type _: Type (?u.824+1)
Type _
} [
Preorder: Type ?u.827 → Type ?u.827
Preorder
α: Type ?u.824
α
] [
InfSet: Type ?u.830 → Type ?u.830
InfSet
α: Type ?u.824
α
] :
InfSet: Type ?u.833 → Type ?u.833
InfSet
(
WithBot: Type ?u.834 → Type ?u.834
WithBot
α: Type ?u.824
α
) := ⟨(@
instSupSetWithTop: {α : Type ?u.844} → [inst : Preorder α] → [inst : SupSet α] → SupSet (WithTop α)
instSupSetWithTop
α: Type ?u.824
α
ᵒᵈ _).
sSup: {α : Type ?u.870} → [self : SupSet α] → Set αα
sSup
theorem
WithTop.sSup_eq: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SupSet α] {s : Set (WithTop α)}, ¬ sBddAbove (some ⁻¹' s)sSup s = ↑(sSup (some ⁻¹' s))
WithTop.sSup_eq
[
Preorder: Type ?u.910 → Type ?u.910
Preorder
α: Type ?u.898
α
] [
SupSet: Type ?u.913 → Type ?u.913
SupSet
α: Type ?u.898
α
] {
s: Set (WithTop α)
s
:
Set: Type ?u.916 → Type ?u.916
Set
(
WithTop: Type ?u.917 → Type ?u.917
WithTop
α: Type ?u.898
α
)} (
hs: ¬ s
hs
:
: ?m.926
s: Set (WithTop α)
s
) (
hs': BddAbove (?m.994 ⁻¹' s)
hs'
:
BddAbove: {α : Type ?u.970} → [inst : Preorder α] → Set αProp
BddAbove
(
(↑): αWithTop α
(↑)
⁻¹'
s: Set (WithTop α)
s
:
Set: Type ?u.987 → Type ?u.987
Set
α: Type ?u.898
α
)) :
sSup: {α : Type ?u.1005} → [self : SupSet α] → Set αα
sSup
s: Set (WithTop α)
s
= ↑(
sSup: {α : Type ?u.1032} → [self : SupSet α] → Set αα
sSup
(
(↑): αWithTop α
(↑)
⁻¹'
s: Set (WithTop α)
s
) :
α: Type ?u.898
α
) := (
if_neg: ∀ {c : Prop} {h : Decidable c}, ¬c∀ {α : Sort ?u.1263} {t e : α}, (if c then t else e) = e
if_neg
hs: ¬ s
hs
).
trans: ∀ {α : Sort ?u.1271} {a b c : α}, a = bb = ca = c
trans
$
if_pos: ∀ {c : Prop} {h : Decidable c}, c∀ {α : Sort ?u.1294} {t e : α}, (if c then t else e) = t
if_pos
hs': BddAbove (some ⁻¹' s)
hs'
#align with_top.Sup_eq
WithTop.sSup_eq: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SupSet α] {s : Set (WithTop α)}, ¬ sBddAbove (WithTop.some ⁻¹' s)sSup s = ↑(sSup (WithTop.some ⁻¹' s))
WithTop.sSup_eq
theorem
WithTop.sInf_eq: ∀ [inst : InfSet α] {s : Set (WithTop α)}, ¬s {}sInf s = ↑(sInf (some ⁻¹' s))
WithTop.sInf_eq
[
InfSet: Type ?u.1334 → Type ?u.1334
InfSet
α: Type ?u.1322
α
] {
s: Set (WithTop α)
s
:
Set: Type ?u.1337 → Type ?u.1337
Set
(
WithTop: Type ?u.1338 → Type ?u.1338
WithTop
α: Type ?u.1322
α
)} (
hs: ¬s {}
hs
: ¬
s: Set (WithTop α)
s
⊆ {
: ?m.1359
}) :
sInf: {α : Type ?u.1408} → [self : InfSet α] → Set αα
sInf
s: Set (WithTop α)
s
= ↑(
sInf: {α : Type ?u.1432} → [self : InfSet α] → Set αα
sInf
(
(↑): αWithTop α
(↑)
⁻¹'
s: Set (WithTop α)
s
) :
α: Type ?u.1322
α
) :=
if_neg: ∀ {c : Prop} {h : Decidable c}, ¬c∀ {α : Sort ?u.1606} {t e : α}, (if c then t else e) = e
if_neg
hs: ¬s {}
hs
#align with_top.Inf_eq
WithTop.sInf_eq: ∀ {α : Type u_1} [inst : InfSet α] {s : Set (WithTop α)}, ¬s {}sInf s = ↑(sInf (WithTop.some ⁻¹' s))
WithTop.sInf_eq
theorem
WithBot.sInf_eq: ∀ [inst : Preorder α] [inst_1 : InfSet α] {s : Set (WithBot α)}, ¬ sBddBelow (some ⁻¹' s)sInf s = ↑(sInf (some ⁻¹' s))
WithBot.sInf_eq
[
Preorder: Type ?u.1651 → Type ?u.1651
Preorder
α: Type ?u.1639
α
] [
InfSet: Type ?u.1654 → Type ?u.1654
InfSet
α: Type ?u.1639
α
] {
s: Set (WithBot α)
s
:
Set: Type ?u.1657 → Type ?u.1657
Set
(
WithBot: Type ?u.1658 → Type ?u.1658
WithBot
α: Type ?u.1639
α
)} (
hs: ¬ s
hs
:
: ?m.1667
s: Set (WithBot α)
s
) (
hs': BddBelow (some ⁻¹' s)
hs'
:
BddBelow: {α : Type ?u.1719} → [inst : Preorder α] → Set αProp
BddBelow
(
(↑): αWithBot α
(↑)
⁻¹'
s: Set (WithBot α)
s
:
Set: Type ?u.1736 → Type ?u.1736
Set
α: Type ?u.1639
α
)) :
sInf: {α : Type ?u.1754} → [self : InfSet α] → Set αα
sInf
s: Set (WithBot α)
s
= ↑(
sInf: {α : Type ?u.1781} → [self : InfSet α] → Set αα
sInf
(
(↑): αWithBot α
(↑)
⁻¹'
s: Set (WithBot α)
s
) :
α: Type ?u.1639
α
) := (
if_neg: ∀ {c : Prop} {h : Decidable c}, ¬c∀ {α : Sort ?u.2029} {t e : α}, (if c then t else e) = e
if_neg
hs: ¬ s
hs
).
trans: ∀ {α : Sort ?u.2037} {a b c : α}, a = bb = ca = c
trans
$
if_pos: ∀ {c : Prop} {h : Decidable c}, c∀ {α : Sort ?u.2066} {t e : α}, (if c then t else e) = t
if_pos
hs': BddBelow (some ⁻¹' s)
hs'
#align with_bot.Inf_eq
WithBot.sInf_eq: ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : InfSet α] {s : Set (WithBot α)}, ¬ sBddBelow (WithBot.some ⁻¹' s)sInf s = ↑(sInf (WithBot.some ⁻¹' s))
WithBot.sInf_eq
theorem
WithBot.sSup_eq: ∀ {α : Type u_1} [inst : SupSet α] {s : Set (WithBot α)}, ¬s {}sSup s = ↑(sSup (some ⁻¹' s))
WithBot.sSup_eq
[
SupSet: Type ?u.2122 → Type ?u.2122
SupSet
α: Type ?u.2110
α
] {
s: Set (WithBot α)
s
:
Set: Type ?u.2125 → Type ?u.2125
Set
(
WithBot: Type ?u.2126 → Type ?u.2126
WithBot
α: Type ?u.2110
α
)} (
hs: ¬s {}
hs
: ¬
s: Set (WithBot α)
s
⊆ {
: ?m.2147
}) :
sSup: {α : Type ?u.2204} → [self : SupSet α] → Set αα
sSup
s: Set (WithBot α)
s
= ↑(
sSup: {α : Type ?u.2228} → [self : SupSet α] → Set αα
sSup
(
(↑): αWithBot α
(↑)
⁻¹'
s: Set (WithBot α)
s
) :
α: Type ?u.2110
α
) :=
if_neg: ∀ {c : Prop} {h : Decidable c}, ¬c∀ {α : Sort ?u.2415} {t e : α}, (if c then t else e) = e
if_neg
hs: ¬s {}
hs
#align with_bot.Sup_eq
WithBot.sSup_eq: ∀ {α : Type u_1} [inst : SupSet α] {s : Set (WithBot α)}, ¬s {}sSup s = ↑(sSup (WithBot.some ⁻¹' s))
WithBot.sSup_eq
@[simp] theorem
WithTop.sInf_empty: ∀ {α : Type u_1} [inst : InfSet α], sInf =
WithTop.sInf_empty
{
α: Type u_1
α
:
Type _: Type (?u.2471+1)
Type _
} [
InfSet: Type ?u.2474 → Type ?u.2474
InfSet
α: Type ?u.2471
α
] :
sInf: {α : Type ?u.2478} → [self : InfSet α] → Set αα
sInf
(
: ?m.2485
:
Set: Type ?u.2482 → Type ?u.2482
Set
(
WithTop: Type ?u.2483 → Type ?u.2483
WithTop
α: Type ?u.2471
α
)) =
: ?m.2543
:=
if_pos: ∀ {c : Prop} {h : Decidable c}, c∀ {α : Sort ?u.2586} {t e : α}, (if c then t else e) = t
if_pos
<|
Set.empty_subset: ∀ {α : Type ?u.2589} (s : Set α), s
Set.empty_subset
_: Set ?m.2590
_
#align with_top.cInf_empty
WithTop.sInf_empty: ∀ {α : Type u_1} [inst : InfSet α], sInf =
WithTop.sInf_empty
@[simp] theorem
WithTop.iInf_empty: ∀ {α : Type u_1} [inst : IsEmpty ι] [inst : InfSet α] (f : ιWithTop α), (i, f i) =
WithTop.iInf_empty
{
α: Type u_1
α
:
Type _: Type (?u.2641+1)
Type _
} [
IsEmpty: Sort ?u.2644 → Prop
IsEmpty
ι: Sort ?u.2638
ι
] [
InfSet: Type ?u.2647 → Type ?u.2647
InfSet
α: Type ?u.2641
α
] (
f: ιWithTop α
f
:
ι: Sort ?u.2638
ι
WithTop: Type ?u.2652 → Type ?u.2652
WithTop
α: Type ?u.2641
α
) : (⨅
i: ?m.2663
i
,
f: ιWithTop α
f
i: ?m.2663
i
) =
: ?m.2683
:=

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

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


(i, f i) =
α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


(i, f i) =
α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


sInf (range fun i => f i) =
α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


(i, f i) =
α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α


(i, f i) =
α✝: Type ?u.2629

β: Type ?u.2632

γ: Type ?u.2635

ι: Sort u_2

α: Type u_1

inst✝¹: IsEmpty ι

inst✝: InfSet α

f: ιWithTop α



Goals accomplished! 🐙
#align with_top.cinfi_empty
WithTop.iInf_empty: ∀ {ι : Sort u_2} {α : Type u_1} [inst : IsEmpty ι] [inst : InfSet α] (f : ιWithTop α), (i, f i) =
WithTop.iInf_empty
theorem
WithTop.coe_sInf': ∀ [inst : InfSet α] {s : Set α}, Set.Nonempty s↑(sInf s) = sInf ((fun a => a) '' s)
WithTop.coe_sInf'
[
InfSet: Type ?u.2957 → Type ?u.2957
InfSet
α: Type ?u.2945
α
] {
s: Set α
s
:
Set: Type ?u.2960 → Type ?u.2960
Set
α: Type ?u.2945
α
} (hs :
s: Set α
s
.
Nonempty: {α : Type ?u.2963} → Set αProp
Nonempty
) : ↑(
sInf: {α : Type ?u.3092} → [self : InfSet α] → Set αα
sInf
s: Set α
s
) = (
sInf: {α : Type ?u.2976} → [self : InfSet α] → Set αα
sInf
((fun (
a: α
a
:
α: Type ?u.2945
α
) ↦ ↑
a: α
a
) ''
s: Set α
s
) :
WithTop: Type ?u.2975 → Type ?u.2975
WithTop
α: Type ?u.2945
α
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

hs: Set.Nonempty s


↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s


intro
↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

hs: Set.Nonempty s


↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s


intro
↑(sInf s) = if (fun a => a) '' s {} then else ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

hs: Set.Nonempty s


↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: (fun a => a) '' s {}


intro.inl
↑(sInf s) =
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

hs: Set.Nonempty s


↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: (fun a => a) '' s {}


intro.inl
↑(sInf s) =
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: (fun a => a) '' s {}


intro.inl
↑(sInf s) =
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

hs: Set.Nonempty s


↑(sInf s) = sInf ((fun a => a) '' s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf s)
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr.h
Injective fun a => a
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr.h
Injective fun a => a
α: Type u_1

β: Type ?u.2948

γ: Type ?u.2951

ι: Sort ?u.2954

inst✝: InfSet α

s: Set α

x: α

hx: x s

h: ¬(fun a => a) '' s {}


intro.inr
↑(sInf s) = ↑(sInf ((fun a => a) ⁻¹' ((fun a => a) '' s)))

Goals accomplished! 🐙
#align with_top.coe_Inf'
WithTop.coe_sInf': ∀ {α : Type u_1} [inst : InfSet α] {s : Set α}, Set.Nonempty s↑(sInf s) = sInf ((fun a => a) '' s)
WithTop.coe_sInf'
-- Porting note: the mathlib3 proof uses `range_comp` in the opposite direction and -- does not need `rfl`. @[norm_cast] theorem
WithTop.coe_iInf: ∀ {α : Type u_2} {ι : Sort u_1} [inst : Nonempty ι] [inst : InfSet α] (f : ια), ↑(i, f i) = i, ↑(f i)
WithTop.coe_iInf
[
Nonempty: Sort ?u.4124 → Prop
Nonempty
ι: Sort ?u.4121
ι
] [
InfSet: Type ?u.4127 → Type ?u.4127
InfSet
α: Type ?u.4112
α
] (
f: ια
f
:
ι: Sort ?u.4121
ι
α: Type ?u.4112
α
) : ↑(⨅
i: ?m.4258
i
,
f: ια
f
i: ?m.4258
i
) = (⨅
i: ?m.4159
i
,
f: ια
f
i: ?m.4159
i
:
WithTop: Type ?u.4139 → Type ?u.4139
WithTop
α: Type ?u.4112
α
) :=

Goals accomplished! 🐙
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(sInf (range fun i => f i)) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(sInf (range fun i => f i)) = sInf (range fun i => ↑(f i))
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


sInf ((fun a => a) '' range f) = sInf (range fun i => ↑(f i))
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


sInf (range ((fun a => a) f)) = sInf (range fun i => ↑(f i))
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


sInf (range ((fun a => a) f)) = sInf (range fun i => ↑(f i))
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


sInf (range ((fun a => a) f)) = sInf (range fun i => ↑(f i))
α: Type u_2

β: Type ?u.4115

γ: Type ?u.4118

ι: Sort u_1

inst✝¹: Nonempty ι

inst✝: InfSet α

f: ια


↑(i, f i) = i, ↑(f i)

Goals accomplished! 🐙
#align with_top.coe_infi
WithTop.coe_iInf: ∀ {α : Type u_2} {ι : Sort u_1} [inst : Nonempty ι] [inst : InfSet α] (f : ια), ↑(i, f i) = i, ↑(f i)
WithTop.coe_iInf
theorem
WithTop.coe_sSup': ∀ [inst : Preorder α] [inst_1 : SupSet α] {s : Set α}, BddAbove s↑(sSup s) = sSup ((fun a => a) '' s)
WithTop.coe_sSup'
[
Preorder: Type ?u.4660 → Type ?u.4660
Preorder
α: Type ?u.4648
α
] [
SupSet: Type ?u.4663 → Type ?u.4663
SupSet
α: Type ?u.4648
α
] {
s: Set α
s
:
Set: Type ?u.4666 → Type ?u.4666
Set
α: Type ?u.4648
α
} (
hs: BddAbove s
hs
:
BddAbove: {α : Type ?u.4669} → [inst : Preorder α] → Set αProp
BddAbove
s: Set α
s
) : ↑(
sSup: {α : Type ?u.4819} → [self : SupSet α] → Set αα
sSup
s: Set α
s
) = (
sSup: {α : Type ?u.4700} → [self : SupSet α] → Set αα
sSup
((fun (
a: α
a
:
α: Type ?u.4648
α
) ↦ ↑
a: α
a
) ''
s: Set α
s
) :
WithTop: Type ?u.4699 → Type ?u.4699
WithTop
α: Type ?u.4648
α
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = sSup ((fun a => a) '' s)
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if (fun a => a) '' s then else if BddAbove ((fun a => a) ⁻¹' ((fun a => a) '' s)) then ↑(sSup ((fun a => a) ⁻¹' ((fun a => a) '' s))) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = sSup ((fun a => a) '' s)
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if (fun a => a) '' s then else if BddAbove ((fun a => a) ⁻¹' ((fun a => a) '' s)) then ↑(sSup ((fun a => a) ⁻¹' ((fun a => a) '' s))) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if BddAbove ((fun a => a) ⁻¹' ((fun a => a) '' s)) then ↑(sSup ((fun a => a) ⁻¹' ((fun a => a) '' s))) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if (fun a => a) '' s then else if BddAbove ((fun a => a) ⁻¹' ((fun a => a) '' s)) then ↑(sSup ((fun a => a) ⁻¹' ((fun a => a) '' s))) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if BddAbove s then ↑(sSup s) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


h
Injective fun a => a
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = if (fun a => a) '' s then else if BddAbove ((fun a => a) ⁻¹' ((fun a => a) '' s)) then ↑(sSup ((fun a => a) ⁻¹' ((fun a => a) '' s))) else
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = ↑(sSup s)
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


h
Injective fun a => a
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


h
Injective fun a => a
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = sSup ((fun a => a) '' s)
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


h
Injective fun a => a
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


h
Injective fun a => a
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


↑(sSup s) = sSup ((fun a => a) '' s)
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s
α: Type u_1

β: Type ?u.4651

γ: Type ?u.4654

ι: Sort ?u.4657

inst✝¹: Preorder α

inst✝: SupSet α

s: Set α

hs: BddAbove s


hnc
¬ (fun a => a) '' s

Goals accomplished! 🐙
#align with_top.coe_Sup'
WithTop.coe_sSup': ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : SupSet α] {s : Set α}, BddAbove s↑(sSup s) = sSup ((fun a => a) '' s)
WithTop.coe_sSup'
-- Porting note: the mathlib3 proof uses `range_comp` in the opposite direction and -- does not need `rfl`. @[norm_cast] theorem
WithTop.coe_iSup: ∀ [inst : Preorder α] [inst_1 : SupSet α] (f : ια), BddAbove (range f)↑(i, f i) = i, ↑(f i)
WithTop.coe_iSup
[
Preorder: Type ?u.5459 → Type ?u.5459
Preorder
α: Type ?u.5447
α
] [
SupSet: Type ?u.5462 → Type ?u.5462
SupSet
α: Type ?u.5447
α
] (
f: ια
f
:
ι: Sort ?u.5456
ι
α: Type ?u.5447
α
) (h :
BddAbove: {α : Type ?u.5469} → [inst : Preorder α] → Set αProp
BddAbove
(
Set.range: {α : Type ?u.5486} → {ι : Sort ?u.5485} → (ια) → Set α
Set.range
f: ια
f
)) : ↑(⨆
i: ?m.5629
i
,
f: ια
f
i: ?m.5629
i
) = (⨆
i: ?m.5527
i
,
f: ια
f
i: ?m.5527
i
:
WithTop: Type ?u.5507 → Type ?u.5507
WithTop
α: Type ?u.5447
α
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(sSup (range fun i => f i)) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(sSup (range fun i => f i)) = sSup (range fun i => ↑(f i))
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


sSup ((fun a => a) '' range f) = sSup (range fun i => ↑(f i))
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


sSup (range ((fun a => a) f)) = sSup (range fun i => ↑(f i))
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


sSup (range ((fun a => a) f)) = sSup (range fun i => ↑(f i))
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


sSup (range ((fun a => a) f)) = sSup (range fun i => ↑(f i))
α: Type u_1

β: Type ?u.5450

γ: Type ?u.5453

ι: Sort u_2

inst✝¹: Preorder α

inst✝: SupSet α

f: ια

h: BddAbove (range f)


↑(i, f i) = i, ↑(f i)

Goals accomplished! 🐙
#align with_top.coe_supr
WithTop.coe_iSup: ∀ {α : Type u_1} {ι : Sort u_2} [inst : Preorder α] [inst_1 : SupSet α] (f : ια), BddAbove (range f)↑(i, f i) = i, ↑(f i)
WithTop.coe_iSup
@[simp] theorem
WithBot.csSup_empty: ∀ {α : Type u_1} [inst : SupSet α], sSup =
WithBot.csSup_empty
{
α: Type u_1
α
:
Type _: Type (?u.6040+1)
Type _
} [
SupSet: Type ?u.6043 → Type ?u.6043
SupSet
α: Type ?u.6040
α
] :
sSup: {α : Type ?u.6047} → [self : SupSet α] → Set αα
sSup
(
: ?m.6054
:
Set: Type ?u.6051 → Type ?u.6051
Set
(
WithBot: Type ?u.6052 → Type ?u.6052
WithBot
α: Type ?u.6040
α
)) =
: ?m.6112
:=
if_pos: ∀ {c : Prop} {h : Decidable c}, c∀ {α : Sort ?u.6164} {t e : α}, (if c then t else e) = t
if_pos
<|
Set.empty_subset: ∀ {α : Type ?u.6167} (s : Set α), s
Set.empty_subset
_: Set ?m.6168
_
#align with_bot.cSup_empty
WithBot.csSup_empty: ∀ {α : Type u_1} [inst : SupSet α], sSup =
WithBot.csSup_empty
@[simp] theorem
WithBot.ciSup_empty: ∀ {α : Type u_1} [inst : IsEmpty ι] [inst : SupSet α] (f : ιWithBot α), (i, f i) =
WithBot.ciSup_empty
{
α: Type ?u.6226
α
:
Type _: Type (?u.6226+1)
Type _
} [
IsEmpty: Sort ?u.6229 → Prop
IsEmpty
ι: Sort ?u.6223
ι
] [
SupSet: Type ?u.6232 → Type ?u.6232
SupSet
α: Type ?u.6226
α
] (
f: ιWithBot α
f
:
ι: Sort ?u.6223
ι
WithBot: Type ?u.6237 → Type ?u.6237
WithBot
α: Type ?u.6226
α
) : (⨆
i: ?m.6248
i
,
f: ιWithBot α
f
i: ?m.6248
i
) =
: ?m.6268
:= @
WithTop.iInf_empty: ∀ {ι : Sort ?u.6324} {α : Type ?u.6323} [inst : IsEmpty ι] [inst : InfSet α] (f : ιWithTop α), (i, f i) =
WithTop.iInf_empty
_: Sort ?u.6324
_
α: Type u_1
α
ᵒᵈ _ _
_: ?m.6325WithTop αᵒᵈ
_
#align with_bot.csupr_empty
WithBot.ciSup_empty: ∀ {ι : Sort u_2} {α : Type u_1} [inst : IsEmpty ι] [inst : SupSet α] (f : ιWithBot α), (i, f i) =
WithBot.ciSup_empty
@[norm_cast] theorem
WithBot.coe_sSup': ∀ {α : Type u_1} [inst : SupSet α] {s : Set α}, Set.Nonempty s↑(sSup s) = sSup ((fun a => a) '' s)
WithBot.coe_sSup'
[
SupSet: Type ?u.6446 → Type ?u.6446
SupSet
α: Type ?u.6434
α
] {
s: Set α
s
:
Set: Type ?u.6449 → Type ?u.6449
Set
α: Type ?u.6434
α
} (hs :
s: Set α
s
.
Nonempty: {α : Type ?u.6452} → Set αProp
Nonempty
) : ↑(
sSup: {α : Type ?u.6589} → [self : SupSet α] → Set αα
sSup
s: Set α
s
) = (
sSup: {α : Type ?u.6465} → [self : SupSet α] → Set αα
sSup
((fun (
a: α
a
:
α: Type ?u.6434
α
) ↦ ↑
a: α
a
) ''
s: Set α
s
) :
WithBot: Type ?u.6464 → Type ?u.6464
WithBot
α: Type ?u.6434
α
) := @
WithTop.coe_sInf': ∀ {α : Type ?u.6661} [inst : InfSet α] {s : Set α}, Set.Nonempty s↑(sInf s) = sInf ((fun a => a) '' s)
WithTop.coe_sInf'
α: Type ?u.6434
α
ᵒᵈ _
_: Set αᵒᵈ
_
hs #align with_bot.coe_Sup'
WithBot.coe_sSup': ∀ {α : Type u_1} [inst : SupSet α] {s : Set α}, Set.Nonempty s↑(sSup s) = sSup ((fun a => a) '' s)
WithBot.coe_sSup'
@[norm_cast] theorem
WithBot.coe_iSup: ∀ [inst : Nonempty ι] [inst : SupSet α] (f : ια), ↑(i, f i) = i, ↑(f i)
WithBot.coe_iSup
[
Nonempty: Sort ?u.6875 → Prop
Nonempty
ι: Sort ?u.6872
ι
] [
SupSet: Type ?u.6878 → Type ?u.6878
SupSet
α: Type ?u.6863
α
] (
f: ια
f
:
ι: Sort ?u.6872
ι
α: Type ?u.6863
α
) : ↑(⨆
i: ?m.7017
i
,
f: ια
f
i: ?m.7017
i
) = (⨆
i: ?m.6910
i
,
f: ια
f
i: ?m.6910
i
:
WithBot: Type ?u.6890 → Type ?u.6890
WithBot
α: Type ?u.6863
α
) := @
WithTop.coe_iInf: ∀ {α : Type ?u.7090} {ι : Sort ?u.7089} [inst : Nonempty ι] [inst : InfSet α] (f : ια), ↑(i, f i) = i, ↑(f i)
WithTop.coe_iInf
α: Type ?u.6863
α
ᵒᵈ
_: Sort ?u.7089
_
_ _
_: ?m.7092αᵒᵈ
_
#align with_bot.coe_supr
WithBot.coe_iSup: ∀ {α : Type u_2} {ι : Sort u_1} [inst : Nonempty ι] [inst : SupSet α] (f : ια), ↑(i, f i) = i, ↑(f i)
WithBot.coe_iSup
@[norm_cast] theorem
WithBot.coe_sInf': ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : InfSet α] {s : Set α}, BddBelow s↑(sInf s) = sInf ((fun a => a) '' s)
WithBot.coe_sInf'
[
Preorder: Type ?u.7309 → Type ?u.7309
Preorder
α: Type ?u.7297
α
] [
InfSet: Type ?u.7312 → Type ?u.7312
InfSet
α: Type ?u.7297
α
] {
s: Set α
s
:
Set: Type ?u.7315 → Type ?u.7315
Set
α: Type ?u.7297
α
} (
hs: BddBelow s
hs
:
BddBelow: {α : Type ?u.7318} → [inst : Preorder α] → Set αProp
BddBelow
s: Set α
s
) : ↑(
sInf: {α : Type ?u.7476} → [self : InfSet α] → Set αα
sInf
s: Set α
s
) = (
sInf: {α : Type ?u.7349} → [self : InfSet α] → Set αα
sInf
((fun (
a: α
a
:
α: Type ?u.7297
α
) ↦ ↑
a: α
a
) ''
s: Set α
s
) :
WithBot: Type ?u.7348 → Type ?u.7348
WithBot
α: Type ?u.7297
α
) := @
WithTop.coe_sSup': ∀ {α : Type ?u.7549} [inst : Preorder α] [inst_1 : SupSet α] {s : Set α}, BddAbove s↑(sSup s) = sSup ((fun a => a) '' s)
WithTop.coe_sSup'
α: Type ?u.7297
α
ᵒᵈ _ _
_: Set αᵒᵈ
_
hs: BddBelow s
hs
#align with_bot.coe_Inf'
WithBot.coe_sInf': ∀ {α : Type u_1} [inst : Preorder α] [inst_1 : InfSet α] {s : Set α}, BddBelow s↑(sInf s) = sInf ((fun a => a) '' s)
WithBot.coe_sInf'
@[norm_cast] theorem
WithBot.coe_iInf: ∀ {α : Type u_1} {ι : Sort u_2} [inst : Preorder α] [inst_1 : InfSet α] (f : ια), BddBelow (range f)↑(i, f i) = i, ↑(f i)
WithBot.coe_iInf
[
Preorder: Type ?u.7799 → Type ?u.7799
Preorder
α: Type ?u.7787
α
] [
InfSet: Type ?u.7802 → Type ?u.7802
InfSet
α: Type ?u.7787
α
] (
f: ια
f
:
ι: Sort ?u.7796
ι
α: Type ?u.7787
α
) (h :
BddBelow: {α : Type ?u.7809} → [inst : Preorder α] → Set αProp
BddBelow
(
Set.range: {α : Type ?u.7826} → {ι : Sort ?u.7825} → (ια) → Set α
Set.range
f: ια
f
)) : ↑(⨅
i: ?m.7977
i
,
f: ια
f
i: ?m.7977
i
) = (⨅
i: ?m.7867
i
,
f: ια
f
i: ?m.7867
i
:
WithBot: Type ?u.7847 → Type ?u.7847
WithBot
α: Type ?u.7787
α
) := @
WithTop.coe_iSup: ∀ {α : Type ?u.8050} {ι : Sort ?u.8051} [inst : Preorder α] [inst_1 : SupSet α] (f : ια), BddAbove (range f)↑(i, f i) = i, ↑(f i)
WithTop.coe_iSup
α: Type ?u.7787
α
ᵒᵈ
_: Sort ?u.8051
_
_ _
_: ?m.8053αᵒᵈ
_
h #align with_bot.coe_infi
WithBot.coe_iInf: ∀ {α : Type u_1} {ι : Sort u_2} [inst : Preorder α] [inst_1 : InfSet α] (f : ια), BddBelow (range f)↑(i, f i) = i, ↑(f i)
WithBot.coe_iInf
end /-- A conditionally complete lattice is a lattice in which every nonempty subset which is bounded above has a supremum, and every nonempty subset which is bounded below has an infimum. Typical examples are real numbers or natural numbers. To differentiate the statements from the corresponding statements in (unconditional) complete lattices, we prefix sInf and subₛ by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.-/ class
ConditionallyCompleteLattice: {α : Type u_1} → [toLattice : Lattice α] → [toSupSet : SupSet α] → [toInfSet : InfSet α] → (∀ (s : Set α) (a : α), BddAbove sa sa SupSet.sSup s) → (∀ (s : Set α) (a : α), Set.Nonempty sa upperBounds sSupSet.sSup s a) → (∀ (s : Set α) (a : α), BddBelow sa sInfSet.sInf s a) → (∀ (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa InfSet.sInf s) → ConditionallyCompleteLattice α
ConditionallyCompleteLattice
(
α: Type ?u.8259
α
:
Type _: Type (?u.8259+1)
Type _
) extends
Lattice: Type ?u.8264 → Type ?u.8264
Lattice
α: Type ?u.8259
α
,
SupSet: Type ?u.8312 → Type ?u.8312
SupSet
α: Type ?u.8259
α
,
InfSet: Type ?u.8316 → Type ?u.8316
InfSet
α: Type ?u.8259
α
where /-- `a ≤ sSup s` for all `a ∈ s`. -/
le_csSup: ∀ {α : Type u_1} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), BddAbove sa sa SupSet.sSup s
le_csSup
: ∀
s: ?m.8321
s
a: ?m.8324
a
,
BddAbove: {α : Type ?u.8328} → [inst : Preorder α] → Set αProp
BddAbove
s: ?m.8321
s
a: ?m.8324
a
s: ?m.8321
s
a: ?m.8324
a
sSup: Set αα
sSup
s: ?m.8321
s
/-- `sSup s ≤ a` for all `a ∈ upperBounds s`. -/
csSup_le: ∀ {α : Type u_1} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), Set.Nonempty sa upperBounds sSupSet.sSup s a
csSup_le
: ∀
s: ?m.8425
s
a: ?m.8428
a
,
Set.Nonempty: {α : Type ?u.8432} → Set αProp
Set.Nonempty
s: ?m.8425
s
a: ?m.8428
a
upperBounds: {α : Type ?u.8453} → [inst : Preorder α] → Set αSet α
upperBounds
s: ?m.8425
s
sSup: Set αα
sSup
s: ?m.8425
s
a: ?m.8428
a
/-- `sInf s ≤ a` for all `a ∈ s`. -/
csInf_le: ∀ {α : Type u_1} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), BddBelow sa sInfSet.sInf s a
csInf_le
: ∀
s: ?m.8526
s
a: ?m.8529
a
,
BddBelow: {α : Type ?u.8533} → [inst : Preorder α] → Set αProp
BddBelow
s: ?m.8526
s
a: ?m.8529
a
s: ?m.8526
s
sInf: Set αα
sInf
s: ?m.8526
s
a: ?m.8529
a
/-- `a ≤ sInf s` for all `a ∈ lowerBounds s`. -/
le_csInf: ∀ {α : Type u_1} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa InfSet.sInf s
le_csInf
: ∀
s: ?m.8621
s
a: ?m.8624
a
,
Set.Nonempty: {α : Type ?u.8628} → Set αProp
Set.Nonempty
s: ?m.8621
s
a: ?m.8624
a
lowerBounds: {α : Type ?u.8649} → [inst : Preorder α] → Set αSet α
lowerBounds
s: ?m.8621
s
a: ?m.8624
a
sInf: Set αα
sInf
s: ?m.8621
s
#align conditionally_complete_lattice
ConditionallyCompleteLattice: Type u_1 → Type u_1
ConditionallyCompleteLattice
-- Porting note: mathlib3 used `renaming` /-- A conditionally complete linear order is a linear order in which every nonempty subset which is bounded above has a supremum, and every nonempty subset which is bounded below has an infimum. Typical examples are real numbers or natural numbers. To differentiate the statements from the corresponding statements in (unconditional) complete linear orders, we prefix sInf and sSup by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.-/ class
ConditionallyCompleteLinearOrder: {α : Type u_1} → [toConditionallyCompleteLattice : ConditionallyCompleteLattice α] → (∀ (a b : α), a b b a) → (DecidableRel fun x x_1 => x x_1) → DecidableEq α(DecidableRel fun x x_1 => x < x_1) → ConditionallyCompleteLinearOrder α
ConditionallyCompleteLinearOrder
(
α: Type ?u.8828
α
:
Type _: Type (?u.8828+1)
Type _
) extends
ConditionallyCompleteLattice: Type ?u.8833 → Type ?u.8833
ConditionallyCompleteLattice
α: Type ?u.8828
α
where /-- A `ConditionallyCompleteLinearOrder` is total. -/
le_total: ∀ {α : Type u_1} [self : ConditionallyCompleteLinearOrder α] (a b : α), a b b a
le_total
(
a: α
a
b: α
b
:
α: Type ?u.8828
α
) :
a: α
a
b: α
b
b: α
b
a: α
a
/-- In a `ConditionallyCompleteLinearOrder`, we assume the order relations are all decidable. -/
decidableLE: {α : Type u_1} → [self : ConditionallyCompleteLinearOrder α] → DecidableRel fun x x_1 => x x_1
decidableLE
:
DecidableRel: {α : Sort ?u.8922} → (ααProp) → Sort (max1?u.8922)
DecidableRel
(. ≤ . :
α: Type ?u.8828
α
α: Type ?u.8828
α
Prop: Type
Prop
) /-- In a `ConditionallyCompleteLinearOrder`, we assume the order relations are all decidable. -/
decidableEq: {α : Type u_1} → [self : ConditionallyCompleteLinearOrder α] → DecidableEq α
decidableEq
:
DecidableEq: Sort ?u.8948 → Sort (max1?u.8948)
DecidableEq
α: Type ?u.8828
α
:= @
decidableEqOfDecidableLE: {α : Type ?u.8949} → [inst : PartialOrder α] → [inst : DecidableRel fun x x_1 => x x_1] → DecidableEq α
decidableEqOfDecidableLE
_: Type ?u.8949
_
_
decidableLE: DecidableRel fun x x_1 => x x_1
decidableLE
/-- In a `ConditionallyCompleteLinearOrder`, we assume the order relations are all decidable. -/
decidableLT: {α : Type u_1} → [self : ConditionallyCompleteLinearOrder α] → DecidableRel fun x x_1 => x < x_1
decidableLT
:
DecidableRel: {α : Sort ?u.9001} → (ααProp) → Sort (max1?u.9001)
DecidableRel
(. < . :
α: Type ?u.8828
α
α: Type ?u.8828
α
Prop: Type
Prop
) := @
decidableLTOfDecidableLE: {α : Type ?u.9027} → [inst : Preorder α] → [inst_1 : DecidableRel fun x x_1 => x x_1] → DecidableRel fun x x_1 => x < x_1
decidableLTOfDecidableLE
_: Type ?u.9027
_
_
decidableLE: DecidableRel fun x x_1 => x x_1
decidableLE
#align conditionally_complete_linear_order
ConditionallyCompleteLinearOrder: Type u_1 → Type u_1
ConditionallyCompleteLinearOrder
instance: (α : Type u_1) → [inst : ConditionallyCompleteLinearOrder α] → LinearOrder α
instance
(
α: Type ?u.9857
α
:
Type _: Type (?u.9857+1)
Type _
) [
ConditionallyCompleteLinearOrder: Type ?u.9860 → Type ?u.9860
ConditionallyCompleteLinearOrder
α: Type ?u.9857
α
] :
LinearOrder: Type ?u.9863 → Type ?u.9863
LinearOrder
α: Type ?u.9857
α
:= { ‹ConditionallyCompleteLinearOrder α› with max :=
Sup.sup: {α : Type ?u.9938} → [self : Sup α] → ααα
Sup.sup
, min :=
Inf.inf: {α : Type ?u.9892} → [self : Inf α] → ααα
Inf.inf
, min_def := fun
a: ?m.10016
a
b: ?m.10019
b

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
min a b = if a b then a else b

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
min a b = if a b then a else b
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
min a b = if a b then a else b

Goals accomplished! 🐙
max_def := fun
a: ?m.10031
a
b: ?m.10034
b

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: a = b


pos
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α


max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₁: a b


neg.inl
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
max a b = if a b then b else a

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

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b


neg
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
max a b = if a b then b else a
α✝: Type ?u.9845

β: Type ?u.9848

γ: Type ?u.9851

ι: Sort ?u.9854

α: Type ?u.10043

inst✝: ConditionallyCompleteLinearOrder α

src✝:= inst✝: ConditionallyCompleteLinearOrder α

a, b: α

hab: ¬a = b

h₂: b a


neg.inr
max a b = if a b then b else a

Goals accomplished! 🐙
} /-- A conditionally complete linear order with `Bot` is a linear order with least element, in which every nonempty subset which is bounded above has a supremum, and every nonempty subset (necessarily bounded below) has an infimum. A typical example is the natural numbers. To differentiate the statements from the corresponding statements in (unconditional) complete linear orders, we prefix `sInf` and `sSup` by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.-/ class
ConditionallyCompleteLinearOrderBot: {α : Type u_1} → [toConditionallyCompleteLinearOrder : ConditionallyCompleteLinearOrder α] → [toBot : Bot α] → (∀ (x : α), x) → SupSet.sSup = ConditionallyCompleteLinearOrderBot α
ConditionallyCompleteLinearOrderBot
(
α: Type ?u.12582
α
:
Type _: Type (?u.12582+1)
Type _
) extends
ConditionallyCompleteLinearOrder: Type ?u.12587 → Type ?u.12587
ConditionallyCompleteLinearOrder
α: Type ?u.12582
α
,
Bot: Type ?u.12671 → Type ?u.12671
Bot
α: Type ?u.12582
α
where /-- `⊥` is the least element -/
bot_le: ∀ {α : Type u_1} [self : ConditionallyCompleteLinearOrderBot α] (x : α), x
bot_le
: ∀
x: α
x
:
α: Type ?u.12582
α
,
: ?m.12680
x: α
x
/-- The supremum of the empty set is `⊥` -/
csSup_empty: ∀ {α : Type u_1} [self : ConditionallyCompleteLinearOrderBot α], SupSet.sSup =
csSup_empty
:
sSup: Set αα
sSup
: ?m.12742
=
: ?m.12785
#align conditionally_complete_linear_order_bot
ConditionallyCompleteLinearOrderBot: Type u_1 → Type u_1
ConditionallyCompleteLinearOrderBot
-- see Note [lower instance priority] instance (priority := 100)
ConditionallyCompleteLinearOrderBot.toOrderBot: [h : ConditionallyCompleteLinearOrderBot α] → OrderBot α
ConditionallyCompleteLinearOrderBot.toOrderBot
[h :
ConditionallyCompleteLinearOrderBot: Type ?u.12918 → Type ?u.12918
ConditionallyCompleteLinearOrderBot
α: Type ?u.12906
α
] :
OrderBot: (α : Type ?u.12921) → [inst : LE α] → Type ?u.12921
OrderBot
α: Type ?u.12906
α
:= { h with } #align conditionally_complete_linear_order_bot.to_order_bot
ConditionallyCompleteLinearOrderBot.toOrderBot: {α : Type u_1} → [h : ConditionallyCompleteLinearOrderBot α] → OrderBot α
ConditionallyCompleteLinearOrderBot.toOrderBot
-- see Note [lower instance priority] /-- A complete lattice is a conditionally complete lattice, as there are no restrictions on the properties of sInf and sSup in a complete lattice.-/ instance (priority := 100)
CompleteLattice.toConditionallyCompleteLattice: {α : Type u_1} → [inst : CompleteLattice α] → ConditionallyCompleteLattice α
CompleteLattice.toConditionallyCompleteLattice
[
CompleteLattice: Type ?u.13165 → Type ?u.13165
CompleteLattice
α: Type ?u.13153
α
] :
ConditionallyCompleteLattice: Type ?u.13168 → Type ?u.13168
ConditionallyCompleteLattice
α: Type ?u.13153
α
:= { ‹CompleteLattice α› with le_csSup :=

Goals accomplished! 🐙
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddAbove sa sa sSup s
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddAbove s✝

a✝: a✝² s✝


a✝² sSup s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddAbove s✝

a✝: a✝² s✝


a✝² sSup s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddAbove sa sa sSup s
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddAbove s✝

a✝: a✝² s✝


a
a✝² s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddAbove s✝

a✝: a✝² s✝


a
a✝² s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddAbove sa sa sSup s

Goals accomplished! 🐙
csSup_le :=

Goals accomplished! 🐙
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa upperBounds ssSup s a
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² upperBounds s✝


sSup s✝ a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² upperBounds s✝


sSup s✝ a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa upperBounds ssSup s a
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² upperBounds s✝


a
∀ (b : α), b s✝b a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² upperBounds s✝


a
∀ (b : α), b s✝b a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa upperBounds ssSup s a

Goals accomplished! 🐙
csInf_le :=

Goals accomplished! 🐙
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddBelow sa ssInf s a
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddBelow s✝

a✝: a✝² s✝


sInf s✝ a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddBelow s✝

a✝: a✝² s✝


sInf s✝ a✝²
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddBelow sa ssInf s a
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddBelow s✝

a✝: a✝² s✝


a
a✝² s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: BddBelow s✝

a✝: a✝² s✝


a
a✝² s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), BddBelow sa ssInf s a

Goals accomplished! 🐙
le_csInf :=

Goals accomplished! 🐙
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa sInf s
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² lowerBounds s✝


a✝² sInf s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² lowerBounds s✝


a✝² sInf s✝
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa sInf s
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² lowerBounds s✝


a
∀ (b : α), b s✝a✝² b
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α

s✝: Set α

a✝²: α

a✝¹: Set.Nonempty s✝

a✝: a✝² lowerBounds s✝


a
∀ (b : α), b s✝a✝² b
α: Type ?u.13153

β: Type ?u.13156

γ: Type ?u.13159

ι: Sort ?u.13162

inst✝: CompleteLattice α

src✝:= inst✝: CompleteLattice α


∀ (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa sInf s

Goals accomplished! 🐙
} #align complete_lattice.to_conditionally_complete_lattice
CompleteLattice.toConditionallyCompleteLattice: {α : Type u_1} → [inst : CompleteLattice α] → ConditionallyCompleteLattice α
CompleteLattice.toConditionallyCompleteLattice
-- see Note [lower instance priority] instance (priority := 100)
CompleteLinearOrder.toConditionallyCompleteLinearOrderBot: {α : Type u_1} → [h : CompleteLinearOrder α] → ConditionallyCompleteLinearOrderBot α
CompleteLinearOrder.toConditionallyCompleteLinearOrderBot
{
α: Type ?u.13465
α
:
Type _: Type (?u.13465+1)
Type _
} [h :
CompleteLinearOrder: Type ?u.13468 → Type ?u.13468
CompleteLinearOrder
α: Type ?u.13465
α
] :
ConditionallyCompleteLinearOrderBot: Type ?u.13471 → Type ?u.13471
ConditionallyCompleteLinearOrderBot
α: Type ?u.13465
α
:= {
CompleteLattice.toConditionallyCompleteLattice: {α : Type ?u.13477} → [inst : CompleteLattice α] → ConditionallyCompleteLattice α
CompleteLattice.toConditionallyCompleteLattice
, h with csSup_empty :=
sSup_empty: ∀ {α : Type ?u.13653} [inst : CompleteLattice α], sSup =
sSup_empty
} #align complete_linear_order.to_conditionally_complete_linear_order_bot
CompleteLinearOrder.toConditionallyCompleteLinearOrderBot: {α : Type u_1} → [h : CompleteLinearOrder α] → ConditionallyCompleteLinearOrderBot α
CompleteLinearOrder.toConditionallyCompleteLinearOrderBot
section open Classical /-- A well founded linear order is conditionally complete, with a bottom element. -/ @[reducible] noncomputable def
IsWellOrder.conditionallyCompleteLinearOrderBot: (α : Type u_1) → [i₁ : LinearOrder α] → [i₂ : OrderBot α] → [h : IsWellOrder α fun x x_1 => x < x_1] → ConditionallyCompleteLinearOrderBot α
IsWellOrder.conditionallyCompleteLinearOrderBot
(
α: Type ?u.13816
α
:
Type _: Type (?u.13816+1)
Type _
) [
i₁: LinearOrder α
i₁
:
_root_.LinearOrder: Type ?u.13819 → Type ?u.13819
_root_.LinearOrder
α: Type ?u.13816
α
] [
i₂: OrderBot α
i₂
:
OrderBot: (α : Type ?u.13822) → [inst : LE α] → Type ?u.13822
OrderBot
α: Type ?u.13816
α
] [
h: IsWellOrder α fun x x_1 => x < x_1
h
:
IsWellOrder: (α : Type ?u.13996) → (ααProp) → Prop
IsWellOrder
α: Type ?u.13816
α
(· < ·): ααProp
(· < ·)
] :
ConditionallyCompleteLinearOrderBot: Type ?u.14135 → Type ?u.14135
ConditionallyCompleteLinearOrderBot
α: Type ?u.13816
α
:= {
i₁: LinearOrder α
i₁
,
i₂: OrderBot α
i₂
,
LinearOrder.toLattice: {α : Type ?u.14143} → [o : LinearOrder α] → Lattice α
LinearOrder.toLattice
with sInf := fun
s: ?m.14485
s
=> if
hs: ?m.14498
hs
:
s: ?m.14485
s
.
Nonempty: {α : Type ?u.14487} → Set αProp
Nonempty
then
h: IsWellOrder α fun x x_1 => x < x_1
h
.
wf: ∀ {α : Type ?u.14507} {r : ααProp} [self : IsWellFounded α r], WellFounded r
wf
.
min: {α : Type ?u.14514} → {r : ααProp} → WellFounded r(s : Set α) → Set.Nonempty sα
min
s: ?m.14485
s
hs: ?m.14498
hs
else
: ?m.14533
csInf_le := fun
s: ?m.14607
s
a: ?m.14610
a
_: ?m.14613
_
has: ?m.14616
has
=>

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

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: BddBelow s

has: a s


sInf s a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: BddBelow s

has: a s

s_ne: Set.Nonempty s


sInf s a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: BddBelow s

has: a s


sInf s a

Goals accomplished! 🐙
le_csInf := fun
s: ?m.14633
s
a: ?m.14636
a
hs: ?m.14639
hs
has: ?m.14642
has
=>

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

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: Set.Nonempty s

has: a lowerBounds s


a sInf s
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: Set.Nonempty s

has: a lowerBounds s


a WellFounded.min (_ : WellFounded fun x x_1 => x < x_1) s (_ : Set.Nonempty s)
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: Set.Nonempty s

has: a lowerBounds s


a sInf s

Goals accomplished! 🐙
sSup := fun
s: ?m.14219
s
=> if
hs: ?m.14336
hs
: (
upperBounds: {α : Type ?u.14221} → [inst : Preorder α] → Set αSet α
upperBounds
s: ?m.14219
s
).
Nonempty: {α : Type ?u.14276} → Set αProp
Nonempty
then
h: IsWellOrder α fun x x_1 => x < x_1
h
.
wf: ∀ {α : Type ?u.14302} {r : ααProp} [self : IsWellFounded α r], WellFounded r
wf
.
min: {α : Type ?u.14313} → {r : ααProp} → WellFounded r(s : Set α) → Set.Nonempty sα
min
_: Set ?m.14319
_
hs: ?m.14289
hs
else
: ?m.14339
le_csSup := fun
s: ?m.14559
s
a: ?m.14562
a
hs: ?m.14565
hs
has: ?m.14568
has
=>

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

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: BddAbove s

has: a s


a sSup s
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: BddAbove s

has: a s

h's: Set.Nonempty (upperBounds s)


a sSup s
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: BddAbove s

has: a s


a sSup s
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: BddAbove s

has: a s

h's: Set.Nonempty (upperBounds s)


a WellFounded.min (_ : WellFounded fun x x_1 => x < x_1) (upperBounds s) (_ : Set.Nonempty (upperBounds s))
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

hs: BddAbove s

has: a s


a sSup s

Goals accomplished! 🐙
csSup_le := fun
s: ?m.14585
s
a: ?m.14588
a
_: ?m.14591
_
has: ?m.14594
has
=>

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

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: Set.Nonempty s

has: a upperBounds s


sSup s a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: Set.Nonempty s

has: a upperBounds s

h's: Set.Nonempty (upperBounds s)


sSup s a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: Set.Nonempty s

has: a upperBounds s


sSup s a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: Set.Nonempty s

has: a upperBounds s

h's: Set.Nonempty (upperBounds s)


WellFounded.min (_ : WellFounded fun x x_1 => x < x_1) (upperBounds s) (_ : Set.Nonempty (upperBounds s)) a
α✝: Type ?u.13804

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α

s: Set α

a: α

x✝: Set.Nonempty s

has: a upperBounds s


sSup s a

Goals accomplished! 🐙
csSup_empty :=

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

β: Type ?u.13807

γ: Type ?u.13810

ι: Sort ?u.13813

α: Type ?u.13816

i₁: LinearOrder α

i₂: OrderBot α

h: IsWellOrder α fun x x_1 => x < x_1

src✝:= LinearOrder.toLattice: Lattice α



Goals accomplished! 🐙
} #align is_well_order.conditionally_complete_linear_order_bot
IsWellOrder.conditionallyCompleteLinearOrderBot: (α : Type u_1) → [i₁ : LinearOrder α] → [i₂ : OrderBot α] → [h : IsWellOrder α fun x x_1 => x < x_1] → ConditionallyCompleteLinearOrderBot α
IsWellOrder.conditionallyCompleteLinearOrderBot
end section OrderDual
instance: (α : Type u_1) → [inst : ConditionallyCompleteLattice α] → ConditionallyCompleteLattice αᵒᵈ
instance
(
α: Type ?u.21975
α
:
Type _: Type (?u.21975+1)
Type _
) [
ConditionallyCompleteLattice: Type ?u.21978 → Type ?u.21978
ConditionallyCompleteLattice
α: Type ?u.21975
α
] :
ConditionallyCompleteLattice: Type ?u.21981 → Type ?u.21981
ConditionallyCompleteLattice
α: Type ?u.21975
α
ᵒᵈ := {
instInfOrderDual: (α : Type ?u.21988) → [inst : Sup α] → Inf αᵒᵈ
instInfOrderDual
α: Type ?u.21975
α
,
instSupOrderDual: (α : Type ?u.22019) → [inst : Inf α] → Sup αᵒᵈ
instSupOrderDual
α: Type ?u.21975
α
,
OrderDual.lattice: (α : Type ?u.22040) → [inst : Lattice α] → Lattice αᵒᵈ
OrderDual.lattice
α: Type ?u.21975
α
with le_csSup := @
ConditionallyCompleteLattice.csInf_le: ∀ {α : Type ?u.22132} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), BddBelow sa ssInf s a
ConditionallyCompleteLattice.csInf_le
α: Type ?u.21975
α
_ csSup_le := @
ConditionallyCompleteLattice.le_csInf: ∀ {α : Type ?u.22166} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), Set.Nonempty sa lowerBounds sa sInf s
ConditionallyCompleteLattice.le_csInf
α: Type ?u.21975
α
_ le_csInf := @
ConditionallyCompleteLattice.csSup_le: ∀ {α : Type ?u.22198} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), Set.Nonempty sa upperBounds ssSup s a
ConditionallyCompleteLattice.csSup_le
α: Type ?u.21975
α
_ csInf_le := @
ConditionallyCompleteLattice.le_csSup: ∀ {α : Type ?u.22182} [self : ConditionallyCompleteLattice α] (s : Set α) (a : α), BddAbove sa sa sSup s
ConditionallyCompleteLattice.le_csSup
α: Type ?u.21975
α
_ } instance (
α: Type ?u.22302
α
:
Type _: Type (?u.22302+1)
Type _
) [
ConditionallyCompleteLinearOrder: Type ?u.22305 → Type ?u.22305
ConditionallyCompleteLinearOrder
α: Type ?u.22302
α
] :
ConditionallyCompleteLinearOrder: Type ?u.22308 → Type ?u.22308
ConditionallyCompleteLinearOrder
α: Type ?u.22302
α
ᵒᵈ :=
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
{
instConditionallyCompleteLatticeOrderDual: (α : Type ?u.22315) → [inst : ConditionallyCompleteLattice α] → ConditionallyCompleteLattice αᵒᵈ
instConditionallyCompleteLatticeOrderDual
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
α: Type ?u.22302
α
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
,
OrderDual.linearOrder: (α : Type ?u.22330) → [inst : LinearOrder α] → LinearOrder αᵒᵈ
OrderDual.linearOrder
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
α: Type ?u.22302
α
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
with
{ instConditionallyCompleteLatticeOrderDual α, OrderDual.linearOrder α with }: ConditionallyCompleteLinearOrder ?m.22342
}
end OrderDual /-- Create a `ConditionallyCompleteLattice` from a `PartialOrder` and `sup` function that returns the least upper bound of a nonempty set which is bounded above. Usually this constructor provides poor definitional equalities. If other fields are known explicitly, they should be provided; for example, if `inf` is known explicitly, construct the `ConditionallyCompleteLattice` instance as ``` instance : ConditionallyCompleteLattice my_T := { inf := better_inf, le_inf := ..., inf_le_right := ..., inf_le_left := ... -- don't care to fix sup, sInf ..conditionallyCompleteLatticeOfsSup my_T _ } ``` -/ def
conditionallyCompleteLatticeOfsSup: (α : Type ?u.22697) → [H1 : PartialOrder α] → [H2 : SupSet α] → (∀ (a b : α), BddAbove {a, b}) → (∀ (a b : α), BddBelow {a, b}) → (∀ (s : Set α), BddAbove sSet.Nonempty sIsLUB s (sSup s)) → ConditionallyCompleteLattice α
conditionallyCompleteLatticeOfsSup
(
α: Type ?u.22697
α
:
Type _: Type (?u.22697+1)
Type _
) [H1 :
PartialOrder: Type ?u.22700 → Type ?u.22700
PartialOrder
α: Type ?u.22697
α
] [
H2: SupSet α
H2
:
SupSet: Type ?u.22703 → Type ?u.22703
SupSet
α: Type ?u.22697
α
] (
bddAbove_pair: ∀ (a b : α), BddAbove {a, b}
bddAbove_pair
: ∀
a: α
a
b: α
b
:
α: Type ?u.22697
α
,
BddAbove: {α : Type ?u.22711} → [inst : Preorder α] → Set αProp
BddAbove
({
a: α
a
,
b: α
b
} :
Set: Type ?u.22730 → Type ?u.22730
Set
α: Type ?u.22697
α
)) (
bddBelow_pair: ∀ (a b : α), BddBelow {a, b}
bddBelow_pair
: ∀
a: α
a
b: α
b
:
α: Type ?u.22697
α
,
BddBelow: {α : Type ?u.22798} → [inst : Preorder α] → Set αProp
BddBelow
({
a: α
a
,
b: α
b
} :
Set: Type ?u.22817 → Type ?u.22817
Set
α: Type ?u.22697
α
)) (
isLUB_sSup: ∀ (s : Set α), BddAbove sSet.Nonempty sIsLUB s (sSup s)
isLUB_sSup
: ∀
s: Set α
s
:
Set: Type ?u.22849 → Type ?u.22849
Set
α: Type ?u.22697
α
,
BddAbove: {α : Type ?u.22853} → [inst : Preorder α] → Set αProp
BddAbove
s: Set α
s
s: Set α
s
.
Nonempty: {α : Type ?u.22875} → Set αProp
Nonempty
IsLUB: {α : Type ?u.22880} → [inst : Preorder α] → Set ααProp
IsLUB
s: Set α
s
(
sSup: {α : Type ?u.22900} → [self : SupSet α] → Set αα
sSup
s: Set α
s
)) :
ConditionallyCompleteLattice: Type ?u.22930 → Type ?u.22930
ConditionallyCompleteLattice
α: Type ?u.22697
α
:= { H1,
H2: SupSet α
H2
with sup := fun
a: ?m.22958
a
b: ?m.22961
b
=>
sSup: {α : Type ?u.22963} → [self : SupSet α] → Set αα
sSup
{
a: ?m.22958
a
,
b: ?m.22961
b
} le_sup_left := fun
a: ?m.23045
a
b: ?m.23048
b
=> (
isLUB_sSup: ∀ (s : Set α), BddAbove sSet.Nonempty sIsLUB s (sSup s)
isLUB_sSup
{
a: ?m.23045
a
,
b: ?m.23048
b
} (
bddAbove_pair: ∀ (a b : α), BddAbove {a, b}
bddAbove_pair
a: ?m.23045
a
b: ?m.23048
b
) (
insert_nonempty: ∀ {α : Type ?u.23080} (a : α) (s : Set α), Set.Nonempty (insert a s)
insert_nonempty
_: ?m.23081
_
_: Set ?m.23081
_
)).
1: ∀ {a b : Prop}, a ba
1
(
mem_insert: ∀ {α : Type ?u.23101} (x : α) (s : Set α), x insert x s
mem_insert
_: ?m.23102
_
_: Set ?m.23102
_
) le_sup_right := fun
a: ?m.23120
a
b: ?m.23123
b
=> (
isLUB_sSup: ∀ (s : Set α), BddAbove sSet.Nonempty sIsLUB s (sSup s)
isLUB_sSup
{
a: ?m.23120
a
,
b: ?m.23123
b
} (
bddAbove_pair: ∀ (a b : α), BddAbove {a, b}
bddAbove_pair
a: ?m.23120
a
b: ?m.23123
b
) (
insert_nonempty: ∀ {α : Type ?u.23151} (a : α) (s : Set α), Set.Nonempty (insert a s)
insert_nonempty
_: ?m.23152
_
_: Set ?m.23152
_
)).
1: ∀ {a b : Prop}, a ba
1
(
mem_insert_of_mem: ∀ {α : Type ?u.23158} {x : α} {s : Set α} (y : α), x sx insert y s
mem_insert_of_mem
_: ?m.23159
_
(
mem_singleton: ∀ {α : Type ?u.23163} (a : α), a {a}
mem_singleton
_: ?m.23164
_
)) sup_le := fun
a: ?m.23171
a
b: ?m.23174
b
_: ?m.23177
_
hac: ?m.23180
hac
hbc: ?m.23183
hbc
=> (
isLUB_sSup: ∀ (s : Set α), BddAbove sSet.Nonempty sIsLUB s (sSup s)
isLUB_sSup
{
a: ?m.23171
a
,
b: ?m.23174
b
} (
bddAbove_pair: ∀ (a b : α), BddAbove {a, b}
bddAbove_pair
a: ?m.23171
a
b: ?m.23174
b
) (
insert_nonempty: ∀ {α : Type ?u.23211} (a : α) (s : Set α), Set.Nonempty (