@@ -23,7 +23,7 @@ assert_not_exists Multiset
2323
2424open Function OrderDual Set
2525
26- variable {α β γ : Type *} {ι : Sort *}
26+ variable {α β γ : Type *} {ι : Sort *} {κ : ι → Sort *}
2727
2828section
2929
@@ -136,9 +136,16 @@ theorem IsGLB.ciInf_set_eq {s : Set β} {f : β → α} (H : IsGLB (f '' s) a) (
136136 IsGLB.csInf_eq (image_eq_range f s ▸ H) (image_eq_range f s ▸ Hne.image f)
137137
138138/-- The indexed supremum of a function is bounded above by a uniform bound -/
139+ @ [to_dual le_ciInf /-- The indexed minimum of a function is bounded below by a uniform
140+ lower bound -/ ]
139141theorem ciSup_le [Nonempty ι] {f : ι → α} {c : α} (H : ∀ x, f x ≤ c) : iSup f ≤ c :=
140142 csSup_le (range_nonempty f) (by rwa [forall_mem_range])
141143
144+ @ [to_dual le_ciInf₂]
145+ theorem ciSup₂_le [Nonempty ι] [∀ i, Nonempty (κ i)] {f : ∀ i, κ i → α}
146+ (h : ∀ i j, f i j ≤ a) : ⨆ (i) (j), f i j ≤ a :=
147+ ciSup_le fun i ↦ ciSup_le <| h i
148+
142149/-- The indexed supremum of a function is bounded below by the value taken at one point -/
143150theorem le_ciSup {f : ι → α} (H : BddAbove (range f)) (c : ι) : f c ≤ iSup f :=
144151 le_csSup H (mem_range_self _)
@@ -431,6 +438,12 @@ When `iInf f < a`, there is an element `i` such that `f i < a`.
431438theorem exists_lt_of_ciInf_lt [Nonempty ι] {f : ι → α} (h : iInf f < a) : ∃ i, f i < a :=
432439 exists_lt_of_lt_ciSup (α := αᵒᵈ) h
433440
441+ @ [to_dual exists_lt_of_ciInf₂_lt]
442+ theorem exists_lt_of_lt_ciSup₂ [Nonempty ι] [∀ i, Nonempty (κ i)]
443+ {f : ∀ i, κ i → α} (h : a < ⨆ (i) (j), f i j) : ∃ i j, a < f i j := by
444+ contrapose! h
445+ exact ciSup₂_le h
446+
434447theorem lt_ciSup_iff [Nonempty ι] {f : ι → α} (hb : BddAbove (range f)) :
435448 a < iSup f ↔ ∃ i, a < f i := by
436449 simpa only [mem_range, exists_exists_eq_and] using lt_csSup_iff hb (range_nonempty _)
@@ -531,6 +544,9 @@ theorem ciSup_le_iff' {f : ι → α} (h : BddAbove (range f)) {a : α} :
531544theorem ciSup_le' {f : ι → α} {a : α} (h : ∀ i, f i ≤ a) : ⨆ i, f i ≤ a :=
532545 csSup_le' <| forall_mem_range.2 h
533546
547+ theorem ciSup₂_le' {f : ∀ i, κ i → α} (h : ∀ i j, f i j ≤ a) : ⨆ (i) (j), f i j ≤ a :=
548+ ciSup_le' fun i ↦ ciSup_le' <| h i
549+
534550@[simp]
535551theorem ciSup_bot : ⨆ _ : ι, (⊥ : α) = ⊥ := le_bot_iff.mp (ciSup_le' fun _ ↦ bot_le)
536552
@@ -543,6 +559,11 @@ theorem exists_lt_of_lt_ciSup' {f : ι → α} {a : α} (h : a < ⨆ i, f i) :
543559 contrapose! h
544560 exact ciSup_le' h
545561
562+ theorem exists_lt_of_lt_ciSup₂' {f : ∀ i, κ i → α} (h : a < ⨆ (i) (j), f i j) :
563+ ∃ i j, a < f i j := by
564+ contrapose! h
565+ exact ciSup₂_le' h
566+
546567theorem ciSup_mono_of_forall_exists' {ι'} {f : ι → α} {g : ι' → α} (hg : BddAbove <| range g)
547568 (h : ∀ i, ∃ i', f i ≤ g i') : ⨆ i, f i ≤ ⨆ i', g i' :=
548569 ciSup_le' fun i ↦ h i |>.elim <| le_ciSup_of_le hg
0 commit comments