[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝¹ : IsEmpty ι
inst✝ : InfSet α
f : ι → WithTop α
⊢ ⨅ (i : ι), f i = ⊤
[PROOFSTEP]
rw [iInf, range_eq_empty, WithTop.sInf_empty]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
hs : Set.Nonempty s
⊢ ↑(sInf s) = sInf ((fun a => ↑a) '' s)
[PROOFSTEP]
obtain ⟨x, hx⟩ := hs
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
x : α
hx : x ∈ s
⊢ ↑(sInf s) = sInf ((fun a => ↑a) '' s)
[PROOFSTEP]
change _ = ite _ _ _
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
x : α
hx : x ∈ s
⊢ ↑(sInf s) = if (fun a => ↑a) '' s ⊆ {⊤} then ⊤ else ↑(sInf ((fun a => ↑a) ⁻¹' ((fun a => ↑a) '' s)))
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
x : α
hx : x ∈ s
h : (fun a => ↑a) '' s ⊆ {⊤}
⊢ ↑(sInf s) = ⊤
[PROOFSTEP]
cases h (mem_image_of_mem _ hx)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
x : α
hx : x ∈ s
h : ¬(fun a => ↑a) '' s ⊆ {⊤}
⊢ ↑(sInf s) = ↑(sInf ((fun a => ↑a) ⁻¹' ((fun a => ↑a) '' s)))
[PROOFSTEP]
rw [preimage_image_eq]
[GOAL]
case neg.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : InfSet α
s : Set α
x : α
hx : x ∈ s
h : ¬(fun a => ↑a) '' s ⊆ {⊤}
⊢ Injective fun a => ↑a
[PROOFSTEP]
exact Option.some_injective _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Nonempty ι
inst✝ : InfSet α
f : ι → α
⊢ ↑(⨅ (i : ι), f i) = ⨅ (i : ι), ↑(f i)
[PROOFSTEP]
rw [iInf, iInf, WithTop.coe_sInf' (range_nonempty f), ← range_comp]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Nonempty ι
inst✝ : InfSet α
f : ι → α
⊢ sInf (range ((fun a => ↑a) ∘ f)) = sInf (range fun i => ↑(f i))
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : SupSet α
s : Set α
hs : BddAbove s
⊢ ↑(sSup s) = sSup ((fun a => ↑a) '' s)
[PROOFSTEP]
change _ = ite _ _ _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
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 ⊤
[PROOFSTEP]
rw [if_neg, preimage_image_eq, if_pos hs]
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : SupSet α
s : Set α
hs : BddAbove s
⊢ Injective fun a => ↑a
[PROOFSTEP]
exact Option.some_injective _
[GOAL]
case hnc
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : SupSet α
s : Set α
hs : BddAbove s
⊢ ¬⊤ ∈ (fun a => ↑a) '' s
[PROOFSTEP]
rintro ⟨x, _, ⟨⟩⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : SupSet α
f : ι → α
h : BddAbove (range f)
⊢ ↑(⨆ (i : ι), f i) = ⨆ (i : ι), ↑(f i)
[PROOFSTEP]
rw [iSup, iSup, WithTop.coe_sSup' h, ← range_comp]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : SupSet α
f : ι → α
h : BddAbove (range f)
⊢ sSup (range ((fun a => ↑a) ∘ f)) = sSup (range fun i => ↑(f i))
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
⊢ min a b = if a ≤ b then a else b
[PROOFSTEP]
by_cases hab : a = b
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : a = b
⊢ min a b = if a ≤ b then a else b
[PROOFSTEP]
simp [hab]
[GOAL]
case neg
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
⊢ min a b = if a ≤ b then a else b
[PROOFSTEP]
rcases ConditionallyCompleteLinearOrder.le_total a b with (h₁ | h₂)
[GOAL]
case neg.inl
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
h₁ : a ≤ b
⊢ min a b = if a ≤ b then a else b
[PROOFSTEP]
simp [h₁]
[GOAL]
case neg.inr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
h₂ : b ≤ a
⊢ min a b = if a ≤ b then a else b
[PROOFSTEP]
simp [show ¬(a ≤ b) from fun h => hab (le_antisymm h h₂), h₂]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
⊢ max a b = if a ≤ b then b else a
[PROOFSTEP]
by_cases hab : a = b
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : a = b
⊢ max a b = if a ≤ b then b else a
[PROOFSTEP]
simp [hab]
[GOAL]
case neg
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
⊢ max a b = if a ≤ b then b else a
[PROOFSTEP]
rcases ConditionallyCompleteLinearOrder.le_total a b with (h₁ | h₂)
[GOAL]
case neg.inl
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
h₁ : a ≤ b
⊢ max a b = if a ≤ b then b else a
[PROOFSTEP]
simp [h₁]
[GOAL]
case neg.inr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLinearOrder α
src✝ : ConditionallyCompleteLinearOrder α := inst✝
a b : α
hab : ¬a = b
h₂ : b ≤ a
⊢ max a b = if a ≤ b then b else a
[PROOFSTEP]
simp [show ¬(a ≤ b) from fun h => hab (le_antisymm h h₂), h₂]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
⊢ ∀ (s : Set α) (a : α), BddAbove s → a ∈ s → a ≤ sSup s
[PROOFSTEP]
intros
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : BddAbove s✝
a✝ : a✝² ∈ s✝
⊢ a✝² ≤ sSup s✝
[PROOFSTEP]
apply le_sSup
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : BddAbove s✝
a✝ : a✝² ∈ s✝
⊢ a✝² ∈ s✝
[PROOFSTEP]
assumption
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
⊢ ∀ (s : Set α) (a : α), Set.Nonempty s → a ∈ upperBounds s → sSup s ≤ a
[PROOFSTEP]
intros
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : Set.Nonempty s✝
a✝ : a✝² ∈ upperBounds s✝
⊢ sSup s✝ ≤ a✝²
[PROOFSTEP]
apply sSup_le
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : Set.Nonempty s✝
a✝ : a✝² ∈ upperBounds s✝
⊢ ∀ (b : α), b ∈ s✝ → b ≤ a✝²
[PROOFSTEP]
assumption
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
⊢ ∀ (s : Set α) (a : α), BddBelow s → a ∈ s → sInf s ≤ a
[PROOFSTEP]
intros
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : BddBelow s✝
a✝ : a✝² ∈ s✝
⊢ sInf s✝ ≤ a✝²
[PROOFSTEP]
apply sInf_le
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : BddBelow s✝
a✝ : a✝² ∈ s✝
⊢ a✝² ∈ s✝
[PROOFSTEP]
assumption
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
⊢ ∀ (s : Set α) (a : α), Set.Nonempty s → a ∈ lowerBounds s → a ≤ sInf s
[PROOFSTEP]
intros
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : Set.Nonempty s✝
a✝ : a✝² ∈ lowerBounds s✝
⊢ a✝² ≤ sInf s✝
[PROOFSTEP]
apply le_sInf
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : CompleteLattice α
src✝ : CompleteLattice α := inst✝
s✝ : Set α
a✝² : α
a✝¹ : Set.Nonempty s✝
a✝ : a✝² ∈ lowerBounds s✝
⊢ ∀ (b : α), b ∈ s✝ → a✝² ≤ b
[PROOFSTEP]
assumption
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
hs : BddAbove s
has : a ∈ s
⊢ a ≤ sSup s
[PROOFSTEP]
have h's : (upperBounds s).Nonempty := hs
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
hs : BddAbove s
has : a ∈ s
h's : Set.Nonempty (upperBounds s)
⊢ a ≤ sSup s
[PROOFSTEP]
simp only [h's, dif_pos]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
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))
[PROOFSTEP]
exact h.wf.min_mem _ h's has
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
x✝ : Set.Nonempty s
has : a ∈ upperBounds s
⊢ sSup s ≤ a
[PROOFSTEP]
have h's : (upperBounds s).Nonempty := ⟨a, has⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
x✝ : Set.Nonempty s
has : a ∈ upperBounds s
h's : Set.Nonempty (upperBounds s)
⊢ sSup s ≤ a
[PROOFSTEP]
simp only [h's, dif_pos]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
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
[PROOFSTEP]
simpa using h.wf.not_lt_min _ h's has
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
x✝ : BddBelow s
has : a ∈ s
⊢ sInf s ≤ a
[PROOFSTEP]
have s_ne : s.Nonempty := ⟨a, has⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
x✝ : BddBelow s
has : a ∈ s
s_ne : Set.Nonempty s
⊢ sInf s ≤ a
[PROOFSTEP]
simpa [s_ne] using not_lt.1 (h.wf.not_lt_min s s_ne has)
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
a : α
hs : Set.Nonempty s
has : a ∈ lowerBounds s
⊢ a ≤ sInf s
[PROOFSTEP]
simp only [hs, dif_pos]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
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)
[PROOFSTEP]
exact has (h.wf.min_mem s hs)
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
⊢ ∀ (s : Set α), ¬BddAbove s → sSup s = sSup univ
[PROOFSTEP]
intro s H
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : ¬BddAbove s
⊢ sSup s = sSup univ
[PROOFSTEP]
have A : ¬(BddAbove (univ : Set α)) := by contrapose! H; exact H.mono (subset_univ _)
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : ¬BddAbove s
⊢ ¬BddAbove univ
[PROOFSTEP]
contrapose! H
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : BddAbove univ
⊢ BddAbove s
[PROOFSTEP]
exact H.mono (subset_univ _)
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : ¬BddAbove s
A : ¬BddAbove univ
⊢ sSup s = sSup univ
[PROOFSTEP]
have B : ¬((upperBounds s).Nonempty) := H
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : ¬BddAbove s
A : ¬BddAbove univ
B : ¬Set.Nonempty (upperBounds s)
⊢ sSup s = sSup univ
[PROOFSTEP]
have C : ¬((upperBounds (univ : Set α)).Nonempty) := A
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
s : Set α
H : ¬BddAbove s
A : ¬BddAbove univ
B : ¬Set.Nonempty (upperBounds s)
C : ¬Set.Nonempty (upperBounds univ)
⊢ sSup s = sSup univ
[PROOFSTEP]
simp [sSup, B, C]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
i₁ : LinearOrder α
i₂ : OrderBot α
h : IsWellOrder α fun x x_1 => x < x_1
src✝ : Lattice α := LinearOrder.toLattice
⊢ sSup ∅ = ⊥
[PROOFSTEP]
simpa using eq_bot_iff.2 (not_lt.1 <| h.wf.not_lt_min _ _ <| mem_univ ⊥)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s✝ t : Set α
a b : α
f : β → α
s : Set β
H : BddAbove (f '' s)
Hne : Set.Nonempty s
⊢ IsLUB (f '' s) (⨆ (i : ↑s), f ↑i)
[PROOFSTEP]
rw [← sSup_image']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s✝ t : Set α
a b : α
f : β → α
s : Set β
H : BddAbove (f '' s)
Hne : Set.Nonempty s
⊢ IsLUB (f '' s) (sSup (f '' s))
[PROOFSTEP]
exact isLUB_csSup (Hne.image _) H
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝¹ : NoMaxOrder α
inst✝ : DenselyOrdered α
w : α
hw : a < w
⊢ ∃ a_1, a_1 ∈ Ioi a ∧ a_1 < w
[PROOFSTEP]
simpa using exists_between hw
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝¹ : NoMinOrder α
inst✝ : DenselyOrdered α
w : α
hw : w < a
⊢ ∃ a_1, a_1 ∈ Iio a ∧ w < a_1
[PROOFSTEP]
simpa [and_comm] using exists_between hw
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : Nonempty ι
f : ι → α
c : α
H : ∀ (x : ι), f x ≤ c
⊢ ∀ (b : α), b ∈ range f → b ≤ c
[PROOFSTEP]
rwa [forall_range_iff]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
f g : ι → α
B : BddAbove (range g)
H : ∀ (x : ι), f x ≤ g x
⊢ iSup f ≤ iSup g
[PROOFSTEP]
cases isEmpty_or_nonempty ι
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
f g : ι → α
B : BddAbove (range g)
H : ∀ (x : ι), f x ≤ g x
h✝ : IsEmpty ι
⊢ iSup f ≤ iSup g
[PROOFSTEP]
rw [iSup_of_empty', iSup_of_empty']
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
f g : ι → α
B : BddAbove (range g)
H : ∀ (x : ι), f x ≤ g x
h✝ : Nonempty ι
⊢ iSup f ≤ iSup g
[PROOFSTEP]
exact ciSup_le fun x => le_ciSup_of_le B x (H x)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a✝ b : α
hι : Nonempty ι
a : α
⊢ ⨆ (x : ι), a = a
[PROOFSTEP]
rw [iSup, range_const, csSup_singleton]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s✝ t : Set α
a b : α
inst✝ : Unique ι
s : ι → α
⊢ ⨆ (i : ι), s i = s default
[PROOFSTEP]
have : ∀ i, s i = s default := fun i => congr_arg s (Unique.eq_default i)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s✝ t : Set α
a b : α
inst✝ : Unique ι
s : ι → α
this : ∀ (i : ι), s i = s default
⊢ ⨆ (i : ι), s i = s default
[PROOFSTEP]
simp only [this, ciSup_const]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : Nonempty ι
f : ι → α
h₁ : ∀ (i : ι), b ≤ f i
h₂ : ∀ (w : α), b < w → ∃ i, f i < w
⊢ ⨅ (i : ι), f i = b
[PROOFSTEP]
exact @ciSup_eq_of_forall_le_of_forall_lt_exists_gt αᵒᵈ _ _ _ _ ‹_› ‹_› ‹_›
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : SemilatticeSup β
f g : β → α
hf : Monotone f
hg : Antitone g
h : f ≤ g
⊢ ⨆ (n : β), f n ∈ ⋂ (n : β), Icc (f n) (g n)
[PROOFSTEP]
refine' mem_iInter.2 fun n => _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : SemilatticeSup β
f g : β → α
hf : Monotone f
hg : Antitone g
h : f ≤ g
n : β
⊢ ⨆ (n : β), f n ∈ Icc (f n) (g n)
[PROOFSTEP]
haveI : Nonempty β := ⟨n⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : SemilatticeSup β
f g : β → α
hf : Monotone f
hg : Antitone g
h : f ≤ g
n : β
this : Nonempty β
⊢ ⨆ (n : β), f n ∈ Icc (f n) (g n)
[PROOFSTEP]
have : ∀ m, f m ≤ g n := fun m => hf.forall_le_of_antitone hg h m n
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝ : SemilatticeSup β
f g : β → α
hf : Monotone f
hg : Antitone g
h : f ≤ g
n : β
this✝ : Nonempty β
this : ∀ (m : β), f m ≤ g n
⊢ ⨆ (n : β), f n ∈ Icc (f n) (g n)
[PROOFSTEP]
exact ⟨le_ciSup ⟨g <| n, forall_range_iff.2 this⟩ _, ciSup_le this⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Type u_5
α : ι → Type u_6
inst✝ : (i : ι) → ConditionallyCompleteLattice (α i)
src✝² : Lattice ((i : ι) → α i) := lattice
src✝¹ : SupSet ((i : ι) → α i) := supSet
src✝ : InfSet ((i : ι) → α i) := infSet
s : Set ((i : ι) → α i)
f : (i : ι) → α i
hs : Set.Nonempty s
hf : f ∈ upperBounds s
i : ι
⊢ Set.Nonempty (range fun f => ↑f i)
[PROOFSTEP]
haveI := hs.to_subtype
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Type u_5
α : ι → Type u_6
inst✝ : (i : ι) → ConditionallyCompleteLattice (α i)
src✝² : Lattice ((i : ι) → α i) := lattice
src✝¹ : SupSet ((i : ι) → α i) := supSet
src✝ : InfSet ((i : ι) → α i) := infSet
s : Set ((i : ι) → α i)
f : (i : ι) → α i
hs : Set.Nonempty s
hf : f ∈ upperBounds s
i : ι
this : Nonempty ↑s
⊢ Set.Nonempty (range fun f => ↑f i)
[PROOFSTEP]
apply range_nonempty
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Type u_5
α : ι → Type u_6
inst✝ : (i : ι) → ConditionallyCompleteLattice (α i)
src✝² : Lattice ((i : ι) → α i) := lattice
src✝¹ : SupSet ((i : ι) → α i) := supSet
src✝ : InfSet ((i : ι) → α i) := infSet
s : Set ((i : ι) → α i)
f : (i : ι) → α i
hs : Set.Nonempty s
hf : f ∈ lowerBounds s
i : ι
⊢ Set.Nonempty (range fun f => ↑f i)
[PROOFSTEP]
haveI := hs.to_subtype
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Type u_5
α : ι → Type u_6
inst✝ : (i : ι) → ConditionallyCompleteLattice (α i)
src✝² : Lattice ((i : ι) → α i) := lattice
src✝¹ : SupSet ((i : ι) → α i) := supSet
src✝ : InfSet ((i : ι) → α i) := infSet
s : Set ((i : ι) → α i)
f : (i : ι) → α i
hs : Set.Nonempty s
hf : f ∈ lowerBounds s
i : ι
this : Nonempty ↑s
⊢ Set.Nonempty (range fun f => ↑f i)
[PROOFSTEP]
apply range_nonempty
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
hs : Set.Nonempty s
hb : b < sSup s
⊢ ∃ a, a ∈ s ∧ b < a
[PROOFSTEP]
contrapose! hb
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
hs : Set.Nonempty s
hb : ∀ (a : α), a ∈ s → a ≤ b
⊢ sSup s ≤ b
[PROOFSTEP]
exact csSup_le hs hb
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
⊢ sSup s = sSup t
[PROOFSTEP]
rcases eq_empty_or_nonempty s with rfl | s_ne
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t✝ : Set α
a b : α
t : Set α
hs : ∀ (x : α), x ∈ ∅ → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ ∅ ∧ y ≤ x
⊢ sSup ∅ = sSup t
[PROOFSTEP]
have : t = ∅ := eq_empty_of_forall_not_mem (fun y yt ↦ by simpa using ht y yt)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t✝ : Set α
a b : α
t : Set α
hs : ∀ (x : α), x ∈ ∅ → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ ∅ ∧ y ≤ x
y : α
yt : y ∈ t
⊢ False
[PROOFSTEP]
simpa using ht y yt
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t✝ : Set α
a b : α
t : Set α
hs : ∀ (x : α), x ∈ ∅ → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ ∅ ∧ y ≤ x
this : t = ∅
⊢ sSup ∅ = sSup t
[PROOFSTEP]
rw [this]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
⊢ sSup s = sSup t
[PROOFSTEP]
rcases eq_empty_or_nonempty t with rfl | t_ne
[GOAL]
case inr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t : Set α
a b : α
s : Set α
s_ne : Set.Nonempty s
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ ∅ ∧ x ≤ y
ht : ∀ (y : α), y ∈ ∅ → ∃ x, x ∈ s ∧ y ≤ x
⊢ sSup s = sSup ∅
[PROOFSTEP]
have : s = ∅ := eq_empty_of_forall_not_mem (fun x xs ↦ by simpa using hs x xs)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t : Set α
a b : α
s : Set α
s_ne : Set.Nonempty s
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ ∅ ∧ x ≤ y
ht : ∀ (y : α), y ∈ ∅ → ∃ x, x ∈ s ∧ y ≤ x
x : α
xs : x ∈ s
⊢ False
[PROOFSTEP]
simpa using hs x xs
[GOAL]
case inr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t : Set α
a b : α
s : Set α
s_ne : Set.Nonempty s
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ ∅ ∧ x ≤ y
ht : ∀ (y : α), y ∈ ∅ → ∃ x, x ∈ s ∧ y ≤ x
this : s = ∅
⊢ sSup s = sSup ∅
[PROOFSTEP]
rw [this]
[GOAL]
case inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
⊢ sSup s = sSup t
[PROOFSTEP]
by_cases B : BddAbove s ∨ BddAbove t
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
⊢ sSup s = sSup t
[PROOFSTEP]
have Bs : BddAbove s := by
  rcases B with hB | ⟨b, hb⟩
  · exact hB
  · refine ⟨b, fun x hx ↦ ?_⟩
    rcases hs x hx with ⟨y, hy, hxy⟩
    exact hxy.trans (hb hy)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
⊢ BddAbove s
[PROOFSTEP]
rcases B with hB | ⟨b, hb⟩
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
hB : BddAbove s
⊢ BddAbove s
[PROOFSTEP]
exact hB
[GOAL]
case inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
b : α
hb : b ∈ upperBounds t
⊢ BddAbove s
[PROOFSTEP]
refine ⟨b, fun x hx ↦ ?_⟩
[GOAL]
case inr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
b : α
hb : b ∈ upperBounds t
x : α
hx : x ∈ s
⊢ x ≤ b
[PROOFSTEP]
rcases hs x hx with ⟨y, hy, hxy⟩
[GOAL]
case inr.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
b : α
hb : b ∈ upperBounds t
x : α
hx : x ∈ s
y : α
hy : y ∈ t
hxy : x ≤ y
⊢ x ≤ b
[PROOFSTEP]
exact hxy.trans (hb hy)
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
⊢ sSup s = sSup t
[PROOFSTEP]
have Bt : BddAbove t := by
  rcases B with ⟨b, hb⟩ | hB
  · refine ⟨b, fun y hy ↦ ?_⟩
    rcases ht y hy with ⟨x, hx, hyx⟩
    exact hyx.trans (hb hx)
  · exact hB
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
⊢ BddAbove t
[PROOFSTEP]
rcases B with ⟨b, hb⟩ | hB
[GOAL]
case inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
Bs : BddAbove s
b : α
hb : b ∈ upperBounds s
⊢ BddAbove t
[PROOFSTEP]
refine ⟨b, fun y hy ↦ ?_⟩
[GOAL]
case inl.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
Bs : BddAbove s
b : α
hb : b ∈ upperBounds s
y : α
hy : y ∈ t
⊢ y ≤ b
[PROOFSTEP]
rcases ht y hy with ⟨x, hx, hyx⟩
[GOAL]
case inl.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b✝ : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
Bs : BddAbove s
b : α
hb : b ∈ upperBounds s
y : α
hy : y ∈ t
x : α
hx : x ∈ s
hyx : y ≤ x
⊢ y ≤ b
[PROOFSTEP]
exact hyx.trans (hb hx)
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
Bs : BddAbove s
hB : BddAbove t
⊢ BddAbove t
[PROOFSTEP]
exact hB
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
⊢ sSup s = sSup t
[PROOFSTEP]
apply le_antisymm
[GOAL]
case pos.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
⊢ sSup s ≤ sSup t
[PROOFSTEP]
apply csSup_le s_ne (fun x hx ↦ ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
x : α
hx : x ∈ s
⊢ x ≤ sSup t
[PROOFSTEP]
rcases hs x hx with ⟨y, yt, hxy⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
x : α
hx : x ∈ s
y : α
yt : y ∈ t
hxy : x ≤ y
⊢ x ≤ sSup t
[PROOFSTEP]
exact hxy.trans (le_csSup Bt yt)
[GOAL]
case pos.a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
⊢ sSup t ≤ sSup s
[PROOFSTEP]
apply csSup_le t_ne (fun y hy ↦ ?_)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
y : α
hy : y ∈ t
⊢ y ≤ sSup s
[PROOFSTEP]
rcases ht y hy with ⟨x, xs, hyx⟩
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : BddAbove s ∨ BddAbove t
Bs : BddAbove s
Bt : BddAbove t
y : α
hy : y ∈ t
x : α
xs : x ∈ s
hyx : y ≤ x
⊢ y ≤ sSup s
[PROOFSTEP]
exact hyx.trans (le_csSup Bs xs)
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t✝ : Set α
a b : α
s t : Set α
hs : ∀ (x : α), x ∈ s → ∃ y, y ∈ t ∧ x ≤ y
ht : ∀ (y : α), y ∈ t → ∃ x, x ∈ s ∧ y ≤ x
s_ne : Set.Nonempty s
t_ne : Set.Nonempty t
B : ¬(BddAbove s ∨ BddAbove t)
⊢ sSup s = sSup t
[PROOFSTEP]
simp [csSup_of_not_bddAbove, (not_or.1 B).1, (not_or.1 B).2]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
hs : Set.Nonempty s
⊢ IsLeast s (sInf s)
[PROOFSTEP]
rw [sInf_eq_argmin_on hs]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
hs : Set.Nonempty s
⊢ IsLeast s (argminOn id (_ : WellFounded fun x x_1 => x < x_1) s hs)
[PROOFSTEP]
exact ⟨argminOn_mem _ _ _ _, fun a ha => argminOn_le id _ _ ha⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
inst✝ : IsEmpty ι
f : ι → α
⊢ ⨆ (i : ι), f i = ⊥
[PROOFSTEP]
rw [iSup_of_empty', csSup_empty]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
hs : BddAbove s
⊢ IsLUB s (sSup s)
[PROOFSTEP]
rcases eq_empty_or_nonempty s with (rfl | hne)
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
hs : BddAbove ∅
⊢ IsLUB ∅ (sSup ∅)
[PROOFSTEP]
simp only [csSup_empty, isLUB_empty]
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
hs : BddAbove s
hne : Set.Nonempty s
⊢ IsLUB s (sSup s)
[PROOFSTEP]
exact isLUB_csSup hne hs
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : ι → α
a : α
h : BddAbove (range s)
⊢ a ≤ iSup s ↔ ∀ (b : α), (∀ (i : ι), s i ≤ b) → a ≤ b
[PROOFSTEP]
simp [iSup, h, le_csSup_iff', upperBounds]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
a : α
h : a < sSup s
⊢ ∃ b, b ∈ s ∧ a < b
[PROOFSTEP]
contrapose! h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
a : α
h : ∀ (b : α), b ∈ s → b ≤ a
⊢ sSup s ≤ a
[PROOFSTEP]
exact csSup_le' h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
a : α
h : a < ⨆ (i : ι), f i
⊢ ∃ i, a < f i
[PROOFSTEP]
contrapose! h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
a : α
h : ∀ (i : ι), f i ≤ a
⊢ ⨆ (i : ι), f i ≤ a
[PROOFSTEP]
exact ciSup_le' h
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
⊢ IsLUB s (sSup s)
[PROOFSTEP]
constructor
[GOAL]
case left
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
⊢ sSup s ∈ upperBounds s
[PROOFSTEP]
show ite _ _ _ ∈ _
[GOAL]
case left
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
⊢ (if ⊤ ∈ s then ⊤ else if BddAbove ((fun a => ↑a) ⁻¹' s) then ↑(sSup ((fun a => ↑a) ⁻¹' s)) else ⊤) ∈ upperBounds s
[PROOFSTEP]
split_ifs with h₁ h₂
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ⊤ ∈ s
⊢ ⊤ ∈ upperBounds s
[PROOFSTEP]
intro _ _
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ⊤ ∈ s
a✝¹ : WithTop β
a✝ : a✝¹ ∈ s
⊢ a✝¹ ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' s)) ∈ upperBounds s
[PROOFSTEP]
rintro (⟨⟩ | a) ha
[GOAL]
case pos.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
ha : none ∈ s
⊢ none ≤ ↑(sSup ((fun a => ↑a) ⁻¹' s))
[PROOFSTEP]
contradiction
[GOAL]
case pos.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
a : β
ha : Option.some a ∈ s
⊢ Option.some a ≤ ↑(sSup ((fun a => ↑a) ⁻¹' s))
[PROOFSTEP]
apply some_le_some.2
[GOAL]
case pos.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
a : β
ha : Option.some a ∈ s
⊢ a ≤ sSup ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
exact le_csSup h₂ ha
[GOAL]
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
⊢ ⊤ ∈ upperBounds s
[PROOFSTEP]
intro _ _
[GOAL]
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
a✝¹ : WithTop β
a✝ : a✝¹ ∈ s
⊢ a✝¹ ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
case right
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
⊢ sSup s ∈ lowerBounds (upperBounds s)
[PROOFSTEP]
show ite _ _ _ ∈ _
[GOAL]
case right
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
⊢ (if ⊤ ∈ s then ⊤ else if BddAbove ((fun a => ↑a) ⁻¹' s) then ↑(sSup ((fun a => ↑a) ⁻¹' s)) else ⊤) ∈
    lowerBounds (upperBounds s)
[PROOFSTEP]
split_ifs with h₁ h₂
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ⊤ ∈ s
⊢ ⊤ ∈ lowerBounds (upperBounds s)
[PROOFSTEP]
rintro (⟨⟩ | a) ha
[GOAL]
case pos.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ⊤ ∈ s
ha : none ∈ upperBounds s
⊢ ⊤ ≤ none
[PROOFSTEP]
exact le_rfl
[GOAL]
case pos.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ⊤ ∈ s
a : β
ha : Option.some a ∈ upperBounds s
⊢ ⊤ ≤ Option.some a
[PROOFSTEP]
exact False.elim (not_top_le_coe a (ha h₁))
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' s)) ∈ lowerBounds (upperBounds s)
[PROOFSTEP]
rintro (⟨⟩ | b) hb
[GOAL]
case pos.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
hb : none ∈ upperBounds s
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' s)) ≤ none
[PROOFSTEP]
exact le_top
[GOAL]
case pos.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' s)) ≤ Option.some b
[PROOFSTEP]
refine' some_le_some.2 (csSup_le _ _)
[GOAL]
case pos.some.refine'_1
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ Set.Nonempty ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
rcases hs with ⟨⟨⟩ | b, hb⟩
[GOAL]
case pos.some.refine'_1.intro.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb✝ : Option.some b ∈ upperBounds s
hb : none ∈ s
⊢ Set.Nonempty ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
exact absurd hb h₁
[GOAL]
case pos.some.refine'_1.intro.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b✝ : β
hb✝ : Option.some b✝ ∈ upperBounds s
b : β
hb : Option.some b ∈ s
⊢ Set.Nonempty ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
exact ⟨b, hb⟩
[GOAL]
case pos.some.refine'_2
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ ∀ (b_1 : β), b_1 ∈ (fun a => ↑a) ⁻¹' s → b_1 ≤ b
[PROOFSTEP]
intro a ha
[GOAL]
case pos.some.refine'_2
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
a : β
ha : a ∈ (fun a => ↑a) ⁻¹' s
⊢ a ≤ b
[PROOFSTEP]
exact some_le_some.1 (hb ha)
[GOAL]
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
⊢ ⊤ ∈ lowerBounds (upperBounds s)
[PROOFSTEP]
rintro (⟨⟩ | b) hb
[GOAL]
case neg.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
hb : none ∈ upperBounds s
⊢ ⊤ ≤ none
[PROOFSTEP]
exact le_rfl
[GOAL]
case neg.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ ⊤ ≤ Option.some b
[PROOFSTEP]
exfalso
[GOAL]
case neg.some.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ False
[PROOFSTEP]
apply h₂
[GOAL]
case neg.some.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ BddAbove ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
use b
[GOAL]
case h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
⊢ b ∈ upperBounds ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
intro a ha
[GOAL]
case h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : Set.Nonempty s
h₁ : ¬⊤ ∈ s
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' s)
b : β
hb : Option.some b ∈ upperBounds s
a : β
ha : a ∈ (fun a => ↑a) ⁻¹' s
⊢ a ≤ b
[PROOFSTEP]
exact some_le_some.1 (hb ha)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
⊢ IsLUB s (sSup s)
[PROOFSTEP]
cases' s.eq_empty_or_nonempty with hs hs
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
⊢ IsLUB s (sSup s)
[PROOFSTEP]
rw [hs]
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
⊢ IsLUB ∅ (sSup ∅)
[PROOFSTEP]
dsimp only [sSup]
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
⊢ IsLUB ∅ (if ⊤ ∈ ∅ then ⊤ else if BddAbove ((fun a => ↑a) ⁻¹' ∅) then ↑(sSup ((fun a => ↑a) ⁻¹' ∅)) else ⊤)
[PROOFSTEP]
show IsLUB ∅ _
[GOAL]
case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
⊢ IsLUB ∅ (if ⊤ ∈ ∅ then ⊤ else if BddAbove ((fun a => ↑a) ⁻¹' ∅) then ↑(sSup ((fun a => ↑a) ⁻¹' ∅)) else ⊤)
[PROOFSTEP]
split_ifs with h₁ h₂
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ⊤ ∈ ∅
⊢ IsLUB ∅ ⊤
[PROOFSTEP]
cases h₁
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ IsLUB ∅ ↑(sSup ((fun a => ↑a) ⁻¹' ∅))
[PROOFSTEP]
rw [preimage_empty, csSup_empty]
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ IsLUB ∅ ↑⊥
[PROOFSTEP]
exact isLUB_empty
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ IsLUB ∅ ⊤
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ False
[PROOFSTEP]
apply h₂
[GOAL]
case neg.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ BddAbove ((fun a => ↑a) ⁻¹' ∅)
[PROOFSTEP]
use⊥
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : s = ∅
h₁ : ¬⊤ ∈ ∅
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' ∅)
⊢ ⊥ ∈ upperBounds ((fun a => ↑a) ⁻¹' ∅)
[PROOFSTEP]
rintro a ⟨⟩
[GOAL]
case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : Set.Nonempty s
⊢ IsLUB s (sSup s)
[PROOFSTEP]
exact isLUB_sSup' hs
[GOAL]
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
⊢ IsGLB s (sInf s)
[PROOFSTEP]
constructor
[GOAL]
case left
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
⊢ sInf s ∈ lowerBounds s
[PROOFSTEP]
show ite _ _ _ ∈ _
[GOAL]
case left
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
⊢ (if s ⊆ {⊤} then ⊤ else ↑(sInf ((fun a => ↑a) ⁻¹' s))) ∈ lowerBounds s
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : s ⊆ {⊤}
⊢ ⊤ ∈ lowerBounds s
[PROOFSTEP]
intro a ha
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : s ⊆ {⊤}
a : WithTop β
ha : a ∈ s
⊢ ⊤ ≤ a
[PROOFSTEP]
exact top_le_iff.2 (Set.mem_singleton_iff.1 (h ha))
[GOAL]
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' s)) ∈ lowerBounds s
[PROOFSTEP]
rintro (⟨⟩ | a) ha
[GOAL]
case neg.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
ha : none ∈ s
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' s)) ≤ none
[PROOFSTEP]
exact le_top
[GOAL]
case neg.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' s)) ≤ Option.some a
[PROOFSTEP]
refine' some_le_some.2 (csInf_le _ ha)
[GOAL]
case neg.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
⊢ BddBelow ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
rcases hs with ⟨⟨⟩ | b, hb⟩
[GOAL]
case neg.some.intro.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
hb : none ∈ lowerBounds s
⊢ BddBelow ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
exfalso
[GOAL]
case neg.some.intro.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
hb : none ∈ lowerBounds s
⊢ False
[PROOFSTEP]
apply h
[GOAL]
case neg.some.intro.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
hb : none ∈ lowerBounds s
⊢ s ⊆ {⊤}
[PROOFSTEP]
intro c hc
[GOAL]
case neg.some.intro.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
hb : none ∈ lowerBounds s
c : WithTop β
hc : c ∈ s
⊢ c ∈ {⊤}
[PROOFSTEP]
rw [mem_singleton_iff, ← top_le_iff]
[GOAL]
case neg.some.intro.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
hb : none ∈ lowerBounds s
c : WithTop β
hc : c ∈ s
⊢ ⊤ ≤ c
[PROOFSTEP]
exact hb hc
[GOAL]
case neg.some.intro.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
b : β
hb : Option.some b ∈ lowerBounds s
⊢ BddBelow ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
use b
[GOAL]
case h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
b : β
hb : Option.some b ∈ lowerBounds s
⊢ b ∈ lowerBounds ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
intro c hc
[GOAL]
case h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ s
b : β
hb : Option.some b ∈ lowerBounds s
c : β
hc : c ∈ (fun a => ↑a) ⁻¹' s
⊢ b ≤ c
[PROOFSTEP]
exact some_le_some.1 (hb hc)
[GOAL]
case right
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
⊢ sInf s ∈ upperBounds (lowerBounds s)
[PROOFSTEP]
show ite _ _ _ ∈ _
[GOAL]
case right
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
⊢ (if s ⊆ {⊤} then ⊤ else ↑(sInf ((fun a => ↑a) ⁻¹' s))) ∈ upperBounds (lowerBounds s)
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : s ⊆ {⊤}
⊢ ⊤ ∈ upperBounds (lowerBounds s)
[PROOFSTEP]
intro _ _
[GOAL]
case pos
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : s ⊆ {⊤}
a✝¹ : WithTop β
a✝ : a✝¹ ∈ lowerBounds s
⊢ a✝¹ ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
case neg
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' s)) ∈ upperBounds (lowerBounds s)
[PROOFSTEP]
rintro (⟨⟩ | a) ha
[GOAL]
case neg.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
ha : none ∈ lowerBounds s
⊢ none ≤ ↑(sInf ((fun a => ↑a) ⁻¹' s))
[PROOFSTEP]
exfalso
[GOAL]
case neg.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
ha : none ∈ lowerBounds s
⊢ False
[PROOFSTEP]
apply h
[GOAL]
case neg.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
ha : none ∈ lowerBounds s
⊢ s ⊆ {⊤}
[PROOFSTEP]
intro b hb
[GOAL]
case neg.none.h
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
ha : none ∈ lowerBounds s
b : WithTop β
hb : b ∈ s
⊢ b ∈ {⊤}
[PROOFSTEP]
exact Set.mem_singleton_iff.2 (top_le_iff.1 (ha hb))
[GOAL]
case neg.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
⊢ Option.some a ≤ ↑(sInf ((fun a => ↑a) ⁻¹' s))
[PROOFSTEP]
refine' some_le_some.2 (le_csInf _ _)
[GOAL]
case neg.some.refine'_1
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
⊢ Set.Nonempty ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
classical
contrapose! h
rintro (⟨⟩ | a) ha
· exact mem_singleton ⊤
· exact (h ⟨a, ha⟩).elim
[GOAL]
case neg.some.refine'_1
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
⊢ Set.Nonempty ((fun a => ↑a) ⁻¹' s)
[PROOFSTEP]
contrapose! h
[GOAL]
case neg.some.refine'_1
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
a : β
ha : Option.some a ∈ lowerBounds s
h : ¬Set.Nonempty ((fun a => ↑a) ⁻¹' s)
⊢ s ⊆ {⊤}
[PROOFSTEP]
rintro (⟨⟩ | a) ha
[GOAL]
case neg.some.refine'_1.none
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
a : β
ha✝ : Option.some a ∈ lowerBounds s
h : ¬Set.Nonempty ((fun a => ↑a) ⁻¹' s)
ha : none ∈ s
⊢ none ∈ {⊤}
[PROOFSTEP]
exact mem_singleton ⊤
[GOAL]
case neg.some.refine'_1.some
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
a✝ : β
ha✝ : Option.some a✝ ∈ lowerBounds s
h : ¬Set.Nonempty ((fun a => ↑a) ⁻¹' s)
a : β
ha : Option.some a ∈ s
⊢ Option.some a ∈ {⊤}
[PROOFSTEP]
exact (h ⟨a, ha⟩).elim
[GOAL]
case neg.some.refine'_2
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
⊢ ∀ (b : β), b ∈ (fun a => ↑a) ⁻¹' s → a ≤ b
[PROOFSTEP]
intro b hb
[GOAL]
case neg.some.refine'_2
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
b : β
hb : b ∈ (fun a => ↑a) ⁻¹' s
⊢ a ≤ b
[PROOFSTEP]
rw [← some_le_some]
[GOAL]
case neg.some.refine'_2
α : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : ConditionallyCompleteLinearOrderBot α
β : Type u_5
inst✝ : ConditionallyCompleteLattice β
s : Set (WithTop β)
hs : BddBelow s
h : ¬s ⊆ {⊤}
a : β
ha : Option.some a ∈ lowerBounds s
b : β
hb : b ∈ (fun a => ↑a) ⁻¹' s
⊢ Option.some a ≤ Option.some b
[PROOFSTEP]
exact ha hb
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
⊢ IsGLB s (sInf s)
[PROOFSTEP]
by_cases hs : BddBelow s
[GOAL]
case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : BddBelow s
⊢ IsGLB s (sInf s)
[PROOFSTEP]
exact isGLB_sInf' hs
[GOAL]
case neg
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : ¬BddBelow s
⊢ IsGLB s (sInf s)
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : ¬BddBelow s
⊢ False
[PROOFSTEP]
apply hs
[GOAL]
case neg.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : ¬BddBelow s
⊢ BddBelow s
[PROOFSTEP]
use⊥
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : ¬BddBelow s
⊢ ⊥ ∈ lowerBounds s
[PROOFSTEP]
intro _ _
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set (WithTop α)
hs : ¬BddBelow s
a✝¹ : WithTop α
a✝ : a✝¹ ∈ s
⊢ ⊥ ≤ a✝¹
[PROOFSTEP]
exact bot_le
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
hb : BddAbove s
⊢ ↑(sSup s) = ⨆ (a : α) (_ : a ∈ s), ↑a
[PROOFSTEP]
rw [coe_sSup' hb, sSup_image]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
hs : Set.Nonempty s
⊢ ↑(sInf s) = ⨅ (a : α) (_ : a ∈ s), ↑a
[PROOFSTEP]
rw [coe_sInf' hs, sInf_image]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : ConditionallyCompleteLattice β
f : α → β
h_mono : Monotone f
s : Set α
c : α
hcs : c ∈ s
h_bdd : BddBelow s
⊢ sInf (f '' s) ≤ f c
[PROOFSTEP]
let f' : αᵒᵈ → βᵒᵈ := f
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : ConditionallyCompleteLattice β
f : α → β
h_mono : Monotone f
s : Set α
c : α
hcs : c ∈ s
h_bdd : BddBelow s
f' : αᵒᵈ → βᵒᵈ := f
⊢ sInf (f '' s) ≤ f c
[PROOFSTEP]
exact @le_csSup_image αᵒᵈ βᵒᵈ _ _ _ (show Monotone f' from fun x y hxy => h_mono hxy) _ _ hcs h_bdd
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : ConditionallyCompleteLattice β
f : α → β
h_mono : Monotone f
s : Set α
hs : Set.Nonempty s
B : α
hB : B ∈ lowerBounds s
⊢ f B ≤ sInf (f '' s)
[PROOFSTEP]
let f' : αᵒᵈ → βᵒᵈ := f
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝¹ : Preorder α
inst✝ : ConditionallyCompleteLattice β
f : α → β
h_mono : Monotone f
s : Set α
hs : Set.Nonempty s
B : α
hB : B ∈ lowerBounds s
f' : αᵒᵈ → βᵒᵈ := f
⊢ f B ≤ sInf (f '' s)
[PROOFSTEP]
exact @csSup_image_le αᵒᵈ βᵒᵈ _ _ _ (show Monotone f' from fun x y hxy => h_mono hxy) _ hs _ hB
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : Nonempty ι
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
hne : Set.Nonempty s
hbdd : BddAbove s
⊢ l (sSup s) = sSup (l '' s)
[PROOFSTEP]
rw [gc.l_csSup hne hbdd, sSup_image']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : Nonempty ι
l : α → β
u : β → α
gc : GaloisConnection l u
f : ι → α
hf : BddAbove (range f)
⊢ l (⨆ (i : ι), f i) = ⨆ (i : ι), l (f i)
[PROOFSTEP]
rw [iSup, gc.l_csSup (range_nonempty _) hf, iSup_range']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : Nonempty ι
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set γ
f : γ → α
hf : BddAbove (f '' s)
hne : Set.Nonempty s
⊢ l (⨆ (i : ↑s), f ↑i) = ⨆ (i : ↑s), l (f ↑i)
[PROOFSTEP]
haveI := hne.to_subtype
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : Nonempty ι
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set γ
f : γ → α
hf : BddAbove (f '' s)
hne : Set.Nonempty s
this : Nonempty ↑s
⊢ l (⨆ (i : ↑s), f ↑i) = ⨆ (i : ↑s), l (f ↑i)
[PROOFSTEP]
rw [image_eq_range] at hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : Nonempty ι
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set γ
f : γ → α
hf : BddAbove (range fun x => f ↑x)
hne : Set.Nonempty s
this : Nonempty ↑s
⊢ l (⨆ (i : ↑s), f ↑i) = ⨆ (i : ↑s), l (f ↑i)
[PROOFSTEP]
exact gc.l_ciSup hf
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : α → β → γ
s : Set α
t : Set β
l u : α → β → γ
l₁ u₁ : β → γ → α
l₂ u₂ : α → γ → β
h₁ : ∀ (b : β), GaloisConnection (swap l b) (u₁ b)
h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)
hs₀ : Set.Nonempty s
hs₁ : BddAbove s
ht₀ : Set.Nonempty t
ht₁ : BddAbove t
⊢ sSup (image2 l s t) = l (sSup s) (sSup t)
[PROOFSTEP]
refine' eq_of_forall_ge_iff fun c => _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : α → β → γ
s : Set α
t : Set β
l u : α → β → γ
l₁ u₁ : β → γ → α
l₂ u₂ : α → γ → β
h₁ : ∀ (b : β), GaloisConnection (swap l b) (u₁ b)
h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)
hs₀ : Set.Nonempty s
hs₁ : BddAbove s
ht₀ : Set.Nonempty t
ht₁ : BddAbove t
c : γ
⊢ sSup (image2 l s t) ≤ c ↔ l (sSup s) (sSup t) ≤ c
[PROOFSTEP]
rw [csSup_le_iff (hs₁.image2 (fun _ => (h₁ _).monotone_l) (fun _ => (h₂ _).monotone_l) ht₁) (hs₀.image2 ht₀),
  forall_image2_iff, forall₂_swap, (h₂ _).le_iff_le, csSup_le_iff ht₁ ht₀]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : ConditionallyCompleteLattice β
inst✝ : ConditionallyCompleteLattice γ
f : α → β → γ
s : Set α
t : Set β
l u : α → β → γ
l₁ u₁ : β → γ → α
l₂ u₂ : α → γ → β
h₁ : ∀ (b : β), GaloisConnection (swap l b) (u₁ b)
h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)
hs₀ : Set.Nonempty s
hs₁ : BddAbove s
ht₀ : Set.Nonempty t
ht₁ : BddAbove t
c : γ
⊢ (∀ (i₂ : β), i₂ ∈ t → ∀ (i₁ : α), i₁ ∈ s → l i₁ i₂ ≤ c) ↔ ∀ (b : β), b ∈ t → b ≤ u₂ (sSup s) c
[PROOFSTEP]
simp_rw [← (h₂ _).le_iff_le, (h₁ _).le_iff_le, csSup_le_iff hs₁ hs₀]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
⊢ sSup S ≤ a
[PROOFSTEP]
cases' S.eq_empty_or_nonempty with h h
[GOAL]
case inl
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
⊢ sSup S ≤ a
[PROOFSTEP]
show ite _ _ _ ≤ a
[GOAL]
case inl
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
⊢ (if ⊤ ∈ S then ⊤ else if BddAbove ((fun a => ↑a) ⁻¹' S) then ↑(sSup ((fun a => ↑a) ⁻¹' S)) else ⊤) ≤ a
[PROOFSTEP]
split_ifs with h₁ h₂
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ⊤ ∈ S
⊢ ⊤ ≤ a
[PROOFSTEP]
rw [h] at h₁
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ⊤ ∈ ∅
⊢ ⊤ ≤ a
[PROOFSTEP]
cases h₁
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' S)) ≤ a
[PROOFSTEP]
convert @bot_le _ _ _ a
[GOAL]
case h.e'_3
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ ↑(sSup ((fun a => ↑a) ⁻¹' S)) = ⊥
[PROOFSTEP]
apply congr_arg
[GOAL]
case h.e'_3.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ sSup ((fun a => ↑a) ⁻¹' S) = ⊥
[PROOFSTEP]
simp only [h, preimage_empty, WithBot.csSup_empty]
[GOAL]
case neg
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ ⊤ ≤ a
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ False
[PROOFSTEP]
apply h₂
[GOAL]
case neg.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ BddAbove ((fun a => ↑a) ⁻¹' S)
[PROOFSTEP]
use⊥
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ ⊥ ∈ upperBounds ((fun a => ↑a) ⁻¹' S)
[PROOFSTEP]
rw [h]
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : S = ∅
h₁ : ¬⊤ ∈ S
h₂ : ¬BddAbove ((fun a => ↑a) ⁻¹' S)
⊢ ⊥ ∈ upperBounds ((fun a => ↑a) ⁻¹' ∅)
[PROOFSTEP]
rintro b ⟨⟩
[GOAL]
case inr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
ha : ∀ (b : WithTop (WithBot α)), b ∈ S → b ≤ a
h : Set.Nonempty S
⊢ sSup S ≤ a
[PROOFSTEP]
refine' (WithTop.isLUB_sSup' h).2 ha
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
haS : a ∈ S
⊢ (if S ⊆ {⊤} then ⊤ else ↑(sInf ((fun a => ↑a) ⁻¹' S))) ≤ a
[PROOFSTEP]
split_ifs with h₁
[GOAL]
case pos
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
haS : a ∈ S
h₁ : S ⊆ {⊤}
⊢ ⊤ ≤ a
[PROOFSTEP]
cases' a with a
[GOAL]
case pos.none
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : S ⊆ {⊤}
haS : none ∈ S
⊢ ⊤ ≤ none
case pos.some
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : S ⊆ {⊤}
a : WithBot α
haS : Option.some a ∈ S
⊢ ⊤ ≤ Option.some a
[PROOFSTEP]
exact le_rfl
[GOAL]
case pos.some
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : S ⊆ {⊤}
a : WithBot α
haS : Option.some a ∈ S
⊢ ⊤ ≤ Option.some a
[PROOFSTEP]
cases h₁ haS
[GOAL]
case neg
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
a : WithTop (WithBot α)
haS : a ∈ S
h₁ : ¬S ⊆ {⊤}
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' S)) ≤ a
[PROOFSTEP]
cases a
[GOAL]
case neg.none
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
haS : none ∈ S
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' S)) ≤ none
[PROOFSTEP]
exact le_top
[GOAL]
case neg.some
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
val✝ : WithBot α
haS : Option.some val✝ ∈ S
⊢ ↑(sInf ((fun a => ↑a) ⁻¹' S)) ≤ Option.some val✝
[PROOFSTEP]
apply WithTop.some_le_some.2
[GOAL]
case neg.some
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
val✝ : WithBot α
haS : Option.some val✝ ∈ S
⊢ sInf ((fun a => ↑a) ⁻¹' S) ≤ val✝
[PROOFSTEP]
refine' csInf_le _ haS
[GOAL]
case neg.some
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
val✝ : WithBot α
haS : Option.some val✝ ∈ S
⊢ BddBelow ((fun a => ↑a) ⁻¹' S)
[PROOFSTEP]
use⊥
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
val✝ : WithBot α
haS : Option.some val✝ ∈ S
⊢ ⊥ ∈ lowerBounds ((fun a => ↑a) ⁻¹' S)
[PROOFSTEP]
intro b _
[GOAL]
case h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
α : Type u_5
inst✝ : ConditionallyCompleteLattice α
src✝³ : InfSet (WithTop (WithBot α)) := instInfSet
src✝² : SupSet (WithTop (WithBot α)) := instSupSet
src✝¹ : BoundedOrder (WithTop (WithBot α)) := boundedOrder
src✝ : Lattice (WithTop (WithBot α)) := lattice
S : Set (WithTop (WithBot α))
h₁ : ¬S ⊆ {⊤}
val✝ : WithBot α
haS : Option.some val✝ ∈ S
b : WithBot α
a✝ : b ∈ (fun a => ↑a) ⁻¹' S
⊢ ⊥ ≤ b
[PROOFSTEP]
exact bot_le
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
⊢ ⨆ (x : ι), ↑(f x) = ⊤ ↔ ¬BddAbove (range f)
[PROOFSTEP]
rw [iSup_eq_top, not_bddAbove_iff]
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
⊢ (∀ (b : WithTop α), b < ⊤ → ∃ i, b < ↑(f i)) ↔ ∀ (x : α), ∃ y, y ∈ range f ∧ x < y
[PROOFSTEP]
refine' ⟨fun hf r => _, fun hf a ha => _⟩
[GOAL]
case refine'_1
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (b : WithTop α), b < ⊤ → ∃ i, b < ↑(f i)
r : α
⊢ ∃ y, y ∈ range f ∧ r < y
[PROOFSTEP]
rcases hf r (WithTop.coe_lt_top r) with ⟨i, hi⟩
[GOAL]
case refine'_1.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (b : WithTop α), b < ⊤ → ∃ i, b < ↑(f i)
r : α
i : ι
hi : ↑r < ↑(f i)
⊢ ∃ y, y ∈ range f ∧ r < y
[PROOFSTEP]
exact ⟨f i, ⟨i, rfl⟩, WithTop.coe_lt_coe.mp hi⟩
[GOAL]
case refine'_2
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (x : α), ∃ y, y ∈ range f ∧ x < y
a : WithTop α
ha : a < ⊤
⊢ ∃ i, a < ↑(f i)
[PROOFSTEP]
rcases hf (a.untop ha.ne) with ⟨-, ⟨i, rfl⟩, hi⟩
[GOAL]
case refine'_2.intro.intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (x : α), ∃ y, y ∈ range f ∧ x < y
a : WithTop α
ha : a < ⊤
i : ι
hi : untop a (_ : a ≠ ⊤) < f i
⊢ ∃ i, a < ↑(f i)
[PROOFSTEP]
exact ⟨i, by simpa only [WithTop.coe_untop _ ha.ne] using WithTop.coe_lt_coe.mpr hi⟩
[GOAL]
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι : Sort u_5
α : Type u_6
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (x : α), ∃ y, y ∈ range f ∧ x < y
a : WithTop α
ha : a < ⊤
i : ι
hi : untop a (_ : a ≠ ⊤) < f i
⊢ a < ↑(f i)
[PROOFSTEP]
simpa only [WithTop.coe_untop _ ha.ne] using WithTop.coe_lt_coe.mpr hi


[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
f : Filter α
g : Filter β
⊢ Set.univ ∈ {s | ∀ᶠ (a : α) in f, ∀ᶠ (b : β) in g, (a, b) ∈ s}
[PROOFSTEP]
simp only [Set.mem_setOf_eq, Set.mem_univ, eventually_true]