@@ -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
@@ -139,6 +139,10 @@ theorem IsGLB.ciInf_set_eq {s : Set β} {f : β → α} (H : IsGLB (f '' s) a) (
139139theorem ciSup_le [Nonempty ι] {f : ι → α} {c : α} (H : ∀ x, f x ≤ c) : iSup f ≤ c :=
140140 csSup_le (range_nonempty f) (by rwa [forall_mem_range])
141141
142+ theorem ciSup₂_le [Nonempty ι] [∀ i, Nonempty (κ i)] {f : ∀ i, κ i → α}
143+ (h : ∀ i j, f i j ≤ a) : ⨆ (i) (j), f i j ≤ a :=
144+ ciSup_le fun i => ciSup_le <| h i
145+
142146/-- The indexed supremum of a function is bounded below by the value taken at one point -/
143147theorem le_ciSup {f : ι → α} (H : BddAbove (range f)) (c : ι) : f c ≤ iSup f :=
144148 le_csSup H (mem_range_self _)
@@ -181,6 +185,10 @@ theorem ciInf_mono {f g : ι → α} (B : BddBelow (range f)) (H : ∀ x, f x
181185theorem le_ciInf [Nonempty ι] {f : ι → α} {c : α} (H : ∀ x, c ≤ f x) : c ≤ iInf f :=
182186 ciSup_le (α := αᵒᵈ) H
183187
188+ theorem le_ciInf₂ [Nonempty ι] [∀ i, Nonempty (κ i)] {f : ∀ i, κ i → α} (h : ∀ i j, a ≤ f i j) :
189+ a ≤ ⨅ (i) (j), f i j :=
190+ le_ciInf fun i => le_ciInf <| h i
191+
184192/-- The indexed infimum of a function is bounded above by the value taken at one point -/
185193theorem ciInf_le {f : ι → α} (H : BddBelow (range f)) (c : ι) : iInf f ≤ f c :=
186194 le_ciSup (α := αᵒᵈ) H c
@@ -373,6 +381,11 @@ theorem exists_lt_of_lt_ciSup [Nonempty ι] {f : ι → α} (h : b < iSup f) :
373381 let ⟨_, ⟨i, rfl⟩, h⟩ := exists_lt_of_lt_csSup (range_nonempty f) h
374382 ⟨i, h⟩
375383
384+ theorem exists_lt_of_lt_ciSup₂ [Nonempty ι] [∀ i, Nonempty (κ i)]
385+ {f : ∀ i, κ i → α} (h : a < ⨆ (i) (j), f i j) : ∃ i j, a < f i j := by
386+ contrapose! h
387+ exact ciSup₂_le h
388+
376389/-- Indexed version of `exists_lt_of_csInf_lt`.
377390When `iInf f < a`, there is an element `i` such that `f i < a`.
378391-/
@@ -479,6 +492,9 @@ theorem ciSup_le_iff' {f : ι → α} (h : BddAbove (range f)) {a : α} :
479492theorem ciSup_le' {f : ι → α} {a : α} (h : ∀ i, f i ≤ a) : ⨆ i, f i ≤ a :=
480493 csSup_le' <| forall_mem_range.2 h
481494
495+ theorem ciSup₂_le' {f : ∀ i, κ i → α} (h : ∀ i j, f i j ≤ a) : ⨆ (i) (j), f i j ≤ a :=
496+ ciSup_le' fun i => ciSup_le' <| h i
497+
482498@[simp]
483499theorem ciSup_bot : ⨆ _ : ι, (⊥ : α) = ⊥ := le_bot_iff.mp (ciSup_le' fun _ ↦ bot_le)
484500
@@ -491,6 +507,11 @@ theorem exists_lt_of_lt_ciSup' {f : ι → α} {a : α} (h : a < ⨆ i, f i) :
491507 contrapose! h
492508 exact ciSup_le' h
493509
510+ theorem exists_lt_of_lt_ciSup₂' {f : ∀ i, κ i → α} (h : a < ⨆ (i) (j), f i j) :
511+ ∃ i j, a < f i j := by
512+ contrapose! h
513+ exact ciSup₂_le' h
514+
494515theorem ciSup_mono' {ι'} {f : ι → α} {g : ι' → α} (hg : BddAbove (range g))
495516 (h : ∀ i, ∃ i', f i ≤ g i') : iSup f ≤ iSup g :=
496517 ciSup_le' fun i => Exists.elim (h i) (le_ciSup_of_le hg)
0 commit comments