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
Cmd instead of
Ctrl .
/-
Copyright (c) 2022 Violeta Hernández Palacios. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Violeta Hernández Palacios
! This file was ported from Lean 3 source module order.bounded
! leanprover-community/mathlib commit aba57d4d3dae35460225919dcd82fe91355162f9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Order.RelClasses
import Mathlib.Data.Set.Intervals.Basic
/-!
# Bounded and unbounded sets
We prove miscellaneous lemmas about bounded and unbounded sets. Many of these are just variations on
the same ideas, or similar results with a few minor differences. The file is divided into these
different general ideas.
-/
namespace Set
variable { α : Type _ } { r : α → α → Prop } { s t : Set α }
/-! ### Subsets of bounded and unbounded sets -/
theorem Bounded.mono ( hst : s ⊆ t ) ( hs : Bounded r t ) : Bounded r s :=
hs . imp : ∀ {α : Sort ?u.76} {p q : α → Prop }, (∀ (a : α ), p a → q a ) → (∃ a , p a ) → ∃ a , q a imp fun _ ha b hb => ha b ( hst hb )
#align set.bounded.mono Set.Bounded.mono
theorem Unbounded.mono ( hst : s ⊆ t ) ( hs : Unbounded r s ) : Unbounded r t := fun a =>
let ⟨ b , hb , hb' ⟩ := hs a
⟨ b , hst hb , hb' ⟩
#align set.unbounded.mono Set.Unbounded.mono
/-! ### Alternate characterizations of unboundedness on orders -/
theorem unbounded_le_of_forall_exists_lt : ∀ [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ a < b ) → Unbounded (fun x x_1 => x ≤ x_1 ) s unbounded_le_of_forall_exists_lt [ Preorder α ] ( h : ∀ (a : α ), ∃ b , b ∈ s ∧ a < b h : ∀ a , ∃ b ∈ s , a < b ) :
Unbounded (· ≤ ·) s := fun a =>
let ⟨ b , hb , hb' ⟩ := h : ∀ (a : α ), ∃ b , b ∈ s ∧ a < b h a
⟨ b , hb , fun hba => hba . not_lt hb' ⟩
#align set.unbounded_le_of_forall_exists_lt Set.unbounded_le_of_forall_exists_lt : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ a < b ) → Unbounded (fun x x_1 => x ≤ x_1 ) s Set.unbounded_le_of_forall_exists_lt
theorem unbounded_le_iff [ LinearOrder α ] : Unbounded (· ≤ ·) s ↔ ∀ a , ∃ b ∈ s , a < b := by
simp only [ Unbounded , not_le ]
#align set.unbounded_le_iff Set.unbounded_le_iff
theorem unbounded_lt_of_forall_exists_le : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ a ≤ b ) → Unbounded (fun x x_1 => x < x_1 ) s unbounded_lt_of_forall_exists_le [ Preorder α ] ( h : ∀ (a : α ), ∃ b , b ∈ s ∧ a ≤ b h : ∀ a , ∃ b ∈ s , a ≤ b ) :
Unbounded (· < ·) s := fun a =>
let ⟨ b , hb , hb' ⟩ := h : ∀ (a : α ), ∃ b , b ∈ s ∧ a ≤ b h a
⟨ b , hb , fun hba => hba . not_le hb' ⟩
#align set.unbounded_lt_of_forall_exists_le Set.unbounded_lt_of_forall_exists_le : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ a ≤ b ) → Unbounded (fun x x_1 => x < x_1 ) s Set.unbounded_lt_of_forall_exists_le
theorem unbounded_lt_iff [ LinearOrder : Type ?u.1637 → Type ?u.1637 LinearOrder α ] : Unbounded (· < ·) s ↔ ∀ a , ∃ b ∈ s , a ≤ b := by
simp only [ Unbounded , not_lt ]
#align set.unbounded_lt_iff Set.unbounded_lt_iff
theorem unbounded_ge_of_forall_exists_gt : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ b < a ) → Unbounded (fun x x_1 => x ≥ x_1 ) s unbounded_ge_of_forall_exists_gt [ Preorder α ] ( h : ∀ (a : α ), ∃ b , b ∈ s ∧ b < a h : ∀ a , ∃ b ∈ s , b < a ) :
Unbounded (· ≥ ·) s :=
@ unbounded_le_of_forall_exists_lt : ∀ {α : Type ?u.2318} {s : Set α } [inst : Preorder α ],
(∀ (a : α ), ∃ b , b ∈ s ∧ a < b ) → Unbounded (fun x x_1 => x ≤ x_1 ) s unbounded_le_of_forall_exists_lt α ᵒᵈ _ _ h : ∀ (a : α ), ∃ b , b ∈ s ∧ b < a h
#align set.unbounded_ge_of_forall_exists_gt Set.unbounded_ge_of_forall_exists_gt : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ b < a ) → Unbounded (fun x x_1 => x ≥ x_1 ) s Set.unbounded_ge_of_forall_exists_gt
theorem unbounded_ge_iff [ LinearOrder : Type ?u.2381 → Type ?u.2381 LinearOrder α ] : Unbounded (· ≥ ·) s ↔ ∀ a , ∃ b ∈ s , b < a :=
⟨ fun h a =>
let ⟨ b , hb , hba : ¬ (fun x x_1 => x ≥ x_1 ) b a hba ⟩ := h a
⟨ b , hb , lt_of_not_ge hba : ¬ (fun x x_1 => x ≥ x_1 ) b a hba ⟩,
unbounded_ge_of_forall_exists_gt : ∀ {α : Type ?u.2854} {s : Set α } [inst : Preorder α ],
(∀ (a : α ), ∃ b , b ∈ s ∧ b < a ) → Unbounded (fun x x_1 => x ≥ x_1 ) s unbounded_ge_of_forall_exists_gt⟩
#align set.unbounded_ge_iff Set.unbounded_ge_iff
theorem unbounded_gt_of_forall_exists_ge : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ b ≤ a ) → Unbounded (fun x x_1 => x > x_1 ) s unbounded_gt_of_forall_exists_ge [ Preorder α ] ( h : ∀ (a : α ), ∃ b , b ∈ s ∧ b ≤ a h : ∀ a , ∃ b ∈ s , b ≤ a ) :
Unbounded (· > ·) s := fun a =>
let ⟨ b , hb , hb' ⟩ := h : ∀ (a : α ), ∃ b , b ∈ s ∧ b ≤ a h a
⟨ b , hb , fun hba => not_le_of_gt hba hb' ⟩
#align set.unbounded_gt_of_forall_exists_ge Set.unbounded_gt_of_forall_exists_ge : ∀ {α : Type u_1} {s : Set α } [inst : Preorder α ], (∀ (a : α ), ∃ b , b ∈ s ∧ b ≤ a ) → Unbounded (fun x x_1 => x > x_1 ) s Set.unbounded_gt_of_forall_exists_ge
theorem unbounded_gt_iff [ LinearOrder : Type ?u.3342 → Type ?u.3342 LinearOrder α ] : Unbounded (· > ·) s ↔ ∀ a , ∃ b ∈ s , b ≤ a :=
⟨ fun h a =>
let ⟨ b , hb , hba : ¬ (fun x x_1 => x > x_1 ) b a hba ⟩ := h a
⟨ b , hb , le_of_not_gt hba : ¬ (fun x x_1 => x > x_1 ) b a hba ⟩,
unbounded_gt_of_forall_exists_ge : ∀ {α : Type ?u.3806} {s : Set α } [inst : Preorder α ],
(∀ (a : α ), ∃ b , b ∈ s ∧ b ≤ a ) → Unbounded (fun x x_1 => x > x_1 ) s unbounded_gt_of_forall_exists_ge⟩
#align set.unbounded_gt_iff Set.unbounded_gt_iff
/-! ### Relation between boundedness by strict and nonstrict orders. -/
/-! #### Less and less or equal -/
theorem Bounded.rel_mono { r' : α → α → Prop } ( h : Bounded r s ) ( hrr' : r ≤ r' ) : Bounded r' s :=
let ⟨ a , ha : ∀ (b : α ), b ∈ s → r b a ha ⟩ := h
⟨ a , fun b hb => hrr' b a ( ha : ∀ (b : α ), b ∈ s → r b a ha b hb )⟩
#align set.bounded.rel_mono Set.Bounded.rel_mono
theorem bounded_le_of_bounded_lt [ Preorder α ] ( h : Bounded (· < ·) s ) : Bounded (· ≤ ·) s :=
h . rel_mono fun _ _ => le_of_lt
#align set.bounded_le_of_bounded_lt Set.bounded_le_of_bounded_lt
theorem Unbounded.rel_mono { r' : α → α → Prop } ( hr : r' ≤ r ) ( h : Unbounded r s ) : Unbounded r' s :=
fun a =>
let ⟨ b , hb , hba ⟩ := h a
⟨ b , hb , fun hba' => hba ( hr b a hba' )⟩
#align set.unbounded.rel_mono Set.Unbounded.rel_mono
theorem unbounded_lt_of_unbounded_le [ Preorder α ] ( h : Unbounded (· ≤ ·) s ) : Unbounded (· < ·) s :=
h . rel_mono fun _ _ => le_of_lt
#align set.unbounded_lt_of_unbounded_le Set.unbounded_lt_of_unbounded_le
theorem bounded_le_iff_bounded_lt [ Preorder α ] [ NoMaxOrder : (α : Type ?u.5019) → [inst : LT α ] → Prop NoMaxOrder α ] :
Bounded (· ≤ ·) s ↔ Bounded (· < ·) s := by
refine' ⟨ fun h => _ , bounded_le_of_bounded_lt ⟩
cases' h with a ha
cases' exists_gt a with b hb
exact ⟨ b , fun c hc => lt_of_le_of_lt : ∀ {α : Type ?u.5364} [inst : Preorder α ] {a b c : α }, a ≤ b → b < c → a < c lt_of_le_of_lt ( ha c hc ) hb ⟩
#align set.bounded_le_iff_bounded_lt Set.bounded_le_iff_bounded_lt
theorem unbounded_lt_iff_unbounded_le [ Preorder α ] [ NoMaxOrder : (α : Type ?u.5442) → [inst : LT α ] → Prop NoMaxOrder α ] :
Unbounded (· < ·) s ↔ Unbounded (· ≤ ·) s := by
simp_rw [ ← not_bounded_iff , bounded_le_iff_bounded_lt ]
#align set.unbounded_lt_iff_unbounded_le Set.unbounded_lt_iff_unbounded_le
/-! #### Greater and greater or equal -/
theorem bounded_ge_of_bounded_gt [ Preorder α ] ( h : Bounded (· > ·) s ) : Bounded (· ≥ ·) s :=
let ⟨ a , ha : ∀ (b : α ), b ∈ s → (fun x x_1 => x > x_1 ) b a ha ⟩ := h
⟨ a , fun b hb => le_of_lt ( ha : ∀ (b : α ), b ∈ s → (fun x x_1 => x > x_1 ) b a ha b hb )⟩
#align set.bounded_ge_of_bounded_gt Set.bounded_ge_of_bounded_gt
theorem unbounded_gt_of_unbounded_ge [ Preorder α ] ( h : Unbounded (· ≥ ·) s ) : Unbounded (· > ·) s :=
fun a =>
let ⟨ b , hb , hba : ¬ (fun x x_1 => x ≥ x_1 ) b a hba ⟩ := h a
⟨ b , hb , fun hba' => hba : ¬ (fun x x_1 => x ≥ x_1 ) b a hba ( le_of_lt hba' )⟩
#align set.unbounded_gt_of_unbounded_ge Set.unbounded_gt_of_unbounded_ge
theorem bounded_ge_iff_bounded_gt [ Preorder α ] [ NoMinOrder : (α : Type ?u.6753) → [inst : LT α ] → Prop NoMinOrder α ] :
Bounded (· ≥ ·) s ↔ Bounded (· > ·) s :=
@ bounded_le_iff_bounded_lt α ᵒᵈ _ _ _
#align set.bounded_ge_iff_bounded_gt Set.bounded_ge_iff_bounded_gt
theorem unbounded_gt_iff_unbounded_ge [ Preorder α ] [ NoMinOrder : (α : Type ?u.6970) → [inst : LT α ] → Prop NoMinOrder α ] :
Unbounded (· > ·) s ↔ Unbounded (· ≥ ·) s :=
@ unbounded_lt_iff_unbounded_le α ᵒᵈ _ _ _
#align set.unbounded_gt_iff_unbounded_ge Set.unbounded_gt_iff_unbounded_ge
/-! ### The universal set -/
theorem unbounded_le_univ [ LE α ] [ NoTopOrder : (α : Type ?u.7187) → [inst : LE α ] → Prop NoTopOrder α ] : Unbounded (· ≤ ·) (@ Set.univ : {α : Type ?u.7249} → Set α Set.univ α ) := fun a =>
let ⟨ b , hb ⟩ := exists_not_le : ∀ {α : Type ?u.7266} [inst : LE α ] [self : NoTopOrder α ] (a : α ), ∃ b , ¬ b ≤ a exists_not_le a
⟨ b , ⟨⟩ , hb ⟩
#align set.unbounded_le_univ Set.unbounded_le_univ
theorem unbounded_lt_univ [ Preorder α ] [ NoTopOrder : (α : Type ?u.7424) → [inst : LE α ] → Prop NoTopOrder α ] : Unbounded (· < ·) (@ Set.univ : {α : Type ?u.7486} → Set α Set.univ α ) :=
unbounded_lt_of_unbounded_le unbounded_le_univ
#align set.unbounded_lt_univ Set.unbounded_lt_univ
theorem unbounded_ge_univ [ LE α ] [ NoBotOrder : (α : Type ?u.7604) → [inst : LE α ] → Prop NoBotOrder α ] : Unbounded (· ≥ ·) (@ Set.univ : {α : Type ?u.7666} → Set α Set.univ α ) := fun a =>
let ⟨ b , hb ⟩ := exists_not_ge : ∀ {α : Type ?u.7683} [inst : LE α ] [self : NoBotOrder α ] (a : α ), ∃ b , ¬ a ≤ b exists_not_ge a
⟨ b , ⟨⟩ , hb ⟩
#align set.unbounded_ge_univ Set.unbounded_ge_univ
theorem unbounded_gt_univ [ Preorder α ] [ NoBotOrder : (α : Type ?u.7841) → [inst : LE α ] → Prop NoBotOrder α ] : Unbounded (· > ·) (@ Set.univ : {α : Type ?u.7903} → Set α Set.univ α ) :=
unbounded_gt_of_unbounded_ge unbounded_ge_univ
#align set.unbounded_gt_univ Set.unbounded_gt_univ
/-! ### Bounded and unbounded intervals -/
theorem bounded_self : ∀ (a : α ), Bounded r { b | r b a } bounded_self ( a : α ) : Bounded r { b | r b a } :=
⟨ a , fun _ => id : ∀ {α : Sort ?u.8058}, α → α id⟩
#align set.bounded_self Set.bounded_self : ∀ {α : Type u_1} {r : α → α → Prop } (a : α ), Bounded r { b | r b a } Set.bounded_self
/-! #### Half-open bounded intervals -/
theorem bounded_lt_Iio [ Preorder α ] ( a : α ) : Bounded (· < ·) ( Iio a ) :=
bounded_self : ∀ {α : Type ?u.8184} {r : α → α → Prop } (a : α ), Bounded r { b | r b a } bounded_self a
#align set.bounded_lt_Iio Set.bounded_lt_Iio
theorem bounded_le_Iio [ Preorder α ] ( a : α ) : Bounded (· ≤ ·) ( Iio a ) :=
bounded_le_of_bounded_lt ( bounded_lt_Iio a )
#align set.bounded_le_Iio Set.bounded_le_Iio
theorem bounded_le_Iic [ Preorder α ] ( a : α ) : Bounded (· ≤ ·) ( Iic a ) :=
bounded_self : ∀ {α : Type ?u.8475} {r : α → α → Prop } (a : α ), Bounded r { b | r b a } bounded_self a
#align set.bounded_le_Iic Set.bounded_le_Iic
theorem bounded_lt_Iic [ Preorder α ] [ NoMaxOrder : (α : Type ?u.8514) → [inst : LT α ] → Prop NoMaxOrder α ] ( a : α ) : Bounded (· < ·) ( Iic a ) := by
simp only [← bounded_le_iff_bounded_lt , bounded_le_Iic ]
#align set.bounded_lt_Iic Set.bounded_lt_Iic
theorem bounded_gt_Ioi [ Preorder α ] ( a : α ) : Bounded (· > ·) ( Ioi a ) :=
bounded_self : ∀ {α : Type ?u.8885} {r : α → α → Prop } (a : α ), Bounded r { b | r b a } bounded_self a
#align set.bounded_gt_Ioi Set.bounded_gt_Ioi
theorem bounded_ge_Ioi [ Preorder α ] ( a : α ) : Bounded (· ≥ ·) ( Ioi a ) :=
bounded_ge_of_bounded_gt ( bounded_gt_Ioi a )
#align set.bounded_ge_Ioi Set.bounded_ge_Ioi
theorem bounded_ge_Ici [ Preorder α ] ( a : α ) : Bounded (· ≥ ·) ( Ici a ) :=
bounded_self : ∀ {α : Type ?u.9176} {r : α → α → Prop } (a : α ), Bounded r { b | r b a } bounded_self a
#align set.bounded_ge_Ici Set.bounded_ge_Ici
theorem bounded_gt_Ici [ Preorder α ] [ NoMinOrder : (α : Type ?u.9215) → [inst : LT α ] → Prop NoMinOrder α ] ( a : α ) : Bounded (· > ·) ( Ici a ) := by
simp only [← bounded_ge_iff_bounded_gt , bounded_ge_Ici ]
#align set.bounded_gt_Ici Set.bounded_gt_Ici
/-! #### Other bounded intervals -/
theorem bounded_lt_Ioo [ Preorder α ] ( a b : α ) : Bounded (· < ·) ( Ioo a b ) :=
( bounded_lt_Iio b ). mono Set.Ioo_subset_Iio_self
#align set.bounded_lt_Ioo Set.bounded_lt_Ioo
theorem bounded_lt_Ico [ Preorder α ] ( a b : α ) : Bounded (· < ·) ( Ico a b ) :=
( bounded_lt_Iio b ). mono Set.Ico_subset_Iio_self
#align set.bounded_lt_Ico Set.bounded_lt_Ico
theorem bounded_lt_Ioc [ Preorder α ] [ NoMaxOrder : (α : Type ?u.9852) → [inst : LT α ] → Prop NoMaxOrder α ] ( a b : α ) : Bounded (· < ·) ( Ioc a b ) :=
( bounded_lt_Iic b ). mono Set.Ioc_subset_Iic_self
#align set.bounded_lt_Ioc Set.bounded_lt_Ioc
theorem bounded_lt_Icc [ Preorder α ] [ NoMaxOrder : (α : Type ?u.10039) → [inst : LT α ] → Prop NoMaxOrder α ] ( a b : α ) : Bounded (· < ·) ( Icc a b ) :=
( bounded_lt_Iic b ). mono Set.Icc_subset_Iic_self
#align set.bounded_lt_Icc Set.bounded_lt_Icc
theorem bounded_le_Ioo [ Preorder α ] ( a b : α ) : Bounded (· ≤ ·) ( Ioo a b ) :=
( bounded_le_Iio b ). mono Set.Ioo_subset_Iio_self
#align set.bounded_le_Ioo Set.bounded_le_Ioo
theorem bounded_le_Ico [ Preorder α ] ( a b : α ) : Bounded (· ≤ ·) ( Ico a b ) :=
( bounded_le_Iio b ). mono Set.Ico_subset_Iio_self
#align set.bounded_le_Ico Set.bounded_le_Ico
theorem bounded_le_Ioc [ Preorder α ] ( a b : α ) : Bounded (· ≤ ·) ( Ioc a b ) :=
( bounded_le_Iic b ). mono Set.Ioc_subset_Iic_self
#align set.bounded_le_Ioc Set.bounded_le_Ioc
theorem bounded_le_Icc [ Preorder α ] ( a b : α ) : Bounded (· ≤ ·) ( Icc a b ) :=
( bounded_le_Iic b ). mono Set.Icc_subset_Iic_self
#align set.bounded_le_Icc Set.bounded_le_Icc
theorem bounded_gt_Ioo [ Preorder α ] ( a b : α ) : Bounded (· > ·) ( Ioo a b ) :=
( bounded_gt_Ioi a ). mono Set.Ioo_subset_Ioi_self
#align set.bounded_gt_Ioo Set.bounded_gt_Ioo
theorem bounded_gt_Ioc [ Preorder α ] ( a b : α ) : Bounded (· > ·) ( Ioc a b ) :=
( bounded_gt_Ioi a ). mono Set.Ioc_subset_Ioi_self
#align set.bounded_gt_Ioc Set.bounded_gt_Ioc
theorem bounded_gt_Ico [ Preorder α ] [ NoMinOrder : (α : Type ?u.11288) → [inst : LT α ] → Prop NoMinOrder α ] ( a b : α ) : Bounded (· > ·) ( Ico a b ) :=
( bounded_gt_Ici a ). mono Set.Ico_subset_Ici_self
#align set.bounded_gt_Ico Set.bounded_gt_Ico
theorem bounded_gt_Icc [ Preorder α ] [ NoMinOrder : (α : Type ?u.11475) → [inst : LT α ] → Prop NoMinOrder α ] ( a b : α ) : Bounded (· > ·) ( Icc a b ) :=
( bounded_gt_Ici a ). mono Set.Icc_subset_Ici_self
#align set.bounded_gt_Icc Set.bounded_gt_Icc
theorem bounded_ge_Ioo [ Preorder α ] ( a b : α ) : Bounded (· ≥ ·) ( Ioo a b ) :=
( bounded_ge_Ioi a ). mono Set.Ioo_subset_Ioi_self
#align set.bounded_ge_Ioo Set.bounded_ge_Ioo
theorem bounded_ge_Ioc [ Preorder α ] ( a b : α ) : Bounded (· ≥ ·) ( Ioc a b ) :=
( bounded_ge_Ioi a ). mono Set.Ioc_subset_Ioi_self
#align set.bounded_ge_Ioc Set.bounded_ge_Ioc
theorem bounded_ge_Ico [ Preorder α ] ( a b : α ) : Bounded (· ≥ ·) ( Ico a b ) :=
( bounded_ge_Ici a ). mono Set.Ico_subset_Ici_self
#align set.bounded_ge_Ico Set.bounded_ge_Ico
theorem bounded_ge_Icc [ Preorder α ] ( a b : α ) : Bounded (· ≥ ·) ( Icc a b ) :=
( bounded_ge_Ici a ). mono Set.Icc_subset_Ici_self
#align set.bounded_ge_Icc Set.bounded_ge_Icc
/-! #### Unbounded intervals -/
theorem unbounded_le_Ioi [ SemilatticeSup : Type ?u.12379 → Type ?u.12379 SemilatticeSup α ] [ NoMaxOrder : (α : Type ?u.12382) → [inst : LT α ] → Prop NoMaxOrder α ] ( a : α ) :
Unbounded (· ≤ ·) ( Ioi a ) := fun b =>
let ⟨ c , hc ⟩ := exists_gt ( a ⊔ b )
⟨ c , le_sup_left . trans_lt hc , ( le_sup_right . trans_lt hc ). not_le ⟩
#align set.unbounded_le_Ioi Set.unbounded_le_Ioi
theorem unbounded_le_Ici [ SemilatticeSup : Type ?u.13210 → Type ?u.13210 SemilatticeSup α ] [ NoMaxOrder : (α : Type ?u.13213) → [inst : LT α ] → Prop NoMaxOrder α ] ( a : α ) :
Unbounded (· ≤ ·) ( Ici a ) :=
( unbounded_le_Ioi a ). mono Set.Ioi_subset_Ici_self
#align set.unbounded_le_Ici Set.unbounded_le_Ici
theorem unbounded_lt_Ioi [ SemilatticeSup : Type ?u.13712 → Type ?u.13712 SemilatticeSup α ] [ NoMaxOrder : (α : Type ?u.13715) → [inst : LT α ] → Prop NoMaxOrder α ] ( a : α ) :
Unbounded (· < ·) ( Ioi a ) :=
unbounded_lt_of_unbounded_le ( unbounded_le_Ioi a )
#align set.unbounded_lt_Ioi Set.unbounded_lt_Ioi
theorem unbounded_lt_Ici [ SemilatticeSup : Type ?u.14182 → Type ?u.14182 SemilatticeSup α ] ( a : α ) : Unbounded (· < ·) ( Ici a ) := fun b =>
⟨ a ⊔ b , le_sup_left , le_sup_right . not_lt ⟩
#align set.unbounded_lt_Ici Set.unbounded_lt_Ici
/-! ### Bounded initial segments -/
theorem bounded_inter_not : ∀ {α : Type u_1} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Bounded r (s ∩ { b | ¬ r b a } ) ↔ Bounded r s bounded_inter_not ( H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m H : ∀ a b , ∃ m , ∀ c , r c a ∨ r c b → r c m ) ( a : α ) :
Bounded r ( s ∩ { b | ¬ r b a }) ↔ Bounded r s := by
α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α refine' ⟨ _ , Bounded.mono ( Set.inter_subset_left : ∀ {α : Type ?u.14789} (s t : Set α ), s ∩ t ⊆ s Set.inter_subset_left s _ )⟩ α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α
α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α rintro ⟨ b , hb : ∀ (b_1 : α ), b_1 ∈ s ∩ { b | ¬ r b a } → r b_1 b hb ⟩ α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a, b : α hb : ∀ (b_1 : α ), b_1 ∈ s ∩ { b | ¬ r b a } → r b_1 b intro
α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α cases' H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m H a b with m hm α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a, b : α hb : ∀ (b_1 : α ), b_1 ∈ s ∩ { b | ¬ r b a } → r b_1 b m : α hm : ∀ (c : α ), r c a ∨ r c b → r c m intro.intro
α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α exact ⟨ m , fun c hc => hm c ( or_iff_not_imp_left : ∀ {a b : Prop }, a ∨ b ↔ ¬ a → b or_iff_not_imp_left. 2 : ∀ {a b : Prop }, (a ↔ b ) → b → a 2 fun hca => hb : ∀ (b_1 : α ), b_1 ∈ s ∩ { b | ¬ r b a } → r b_1 b hb c ⟨ hc , hca ⟩)⟩
#align set.bounded_inter_not Set.bounded_inter_not : ∀ {α : Type u_1} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Bounded r (s ∩ { b | ¬ r b a } ) ↔ Bounded r s Set.bounded_inter_not
theorem unbounded_inter_not : ∀ {α : Type u_1} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Unbounded r (s ∩ { b | ¬ r b a } ) ↔ Unbounded r s unbounded_inter_not ( H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m H : ∀ a b , ∃ m , ∀ c , r c a ∨ r c b → r c m ) ( a : α ) :
Unbounded r ( s ∩ { b | ¬ r b a }) ↔ Unbounded r s := by
α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α simp_rw [ α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α ← not_bounded_iff , α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α α : Type u_1r : α → α → Prop s, t : Set α H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m a : α bounded_inter_not : ∀ {α : Type ?u.15219} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Bounded r (s ∩ { b | ¬ r b a } ) ↔ Bounded r s bounded_inter_not H : ∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m H ]
#align set.unbounded_inter_not Set.unbounded_inter_not : ∀ {α : Type u_1} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Unbounded r (s ∩ { b | ¬ r b a } ) ↔ Unbounded r s Set.unbounded_inter_not
/-! #### Less or equal -/
theorem bounded_le_inter_not_le [ SemilatticeSup : Type ?u.15310 → Type ?u.15310 SemilatticeSup α ] ( a : α ) :
Bounded (· ≤ ·) ( s ∩ { b | ¬ b ≤ a }) ↔ Bounded (· ≤ ·) s :=
bounded_inter_not : ∀ {α : Type ?u.15568} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Bounded r (s ∩ { b | ¬ r b a } ) ↔ Bounded r s bounded_inter_not ( fun x y => ⟨ x ⊔ y , fun _ h => h . elim : ∀ {a b c : Prop }, a ∨ b → (a → c ) → (b → c ) → c elim le_sup_of_le_left le_sup_of_le_right ⟩) a
#align set.bounded_le_inter_not_le Set.bounded_le_inter_not_le
theorem unbounded_le_inter_not_le [ SemilatticeSup : Type ?u.17514 → Type ?u.17514 SemilatticeSup α ] ( a : α ) :
Unbounded (· ≤ ·) ( s ∩ { b | ¬ b ≤ a }) ↔ Unbounded (· ≤ ·) s := by
rw [ ← not_bounded_iff , ← not_bounded_iff , not_iff_not : ∀ {a b : Prop }, (¬ a ↔ ¬ b ) ↔ (a ↔ b ) not_iff_not]
exact bounded_le_inter_not_le a
#align set.unbounded_le_inter_not_le Set.unbounded_le_inter_not_le
theorem bounded_le_inter_lt [ LinearOrder : Type ?u.17891 → Type ?u.17891 LinearOrder α ] ( a : α ) :
Bounded (· ≤ ·) ( s ∩ { b | a < b }) ↔ Bounded (· ≤ ·) s := by
simp_rw [ ← not_le , bounded_le_inter_not_le ]
#align set.bounded_le_inter_lt Set.bounded_le_inter_lt
theorem unbounded_le_inter_lt [ LinearOrder : Type ?u.18812 → Type ?u.18812 LinearOrder α ] ( a : α ) :
Unbounded (· ≤ ·) ( s ∩ { b | a < b }) ↔ Unbounded (· ≤ ·) s := by
convert @ unbounded_le_inter_not_le _ s _ a h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
exact lt_iff_not_le
#align set.unbounded_le_inter_lt Set.unbounded_le_inter_lt
theorem bounded_le_inter_le [ LinearOrder : Type ?u.22048 → Type ?u.22048 LinearOrder α ] ( a : α ) :
Bounded (· ≤ ·) ( s ∩ { b | a ≤ b }) ↔ Bounded (· ≤ ·) s := by
refine' ⟨ _ , Bounded.mono ( Set.inter_subset_left : ∀ {α : Type ?u.22330} (s t : Set α ), s ∩ t ⊆ s Set.inter_subset_left s _ )⟩
rw [ ← @ bounded_le_inter_lt _ s _ a ]
exact Bounded.mono fun x ⟨ hx , hx' ⟩ => ⟨ hx , le_of_lt hx' ⟩
#align set.bounded_le_inter_le Set.bounded_le_inter_le
theorem unbounded_le_inter_le [ LinearOrder : Type ?u.22651 → Type ?u.22651 LinearOrder α ] ( a : α ) :
Unbounded (· ≤ ·) ( s ∩ { b | a ≤ b }) ↔ Unbounded (· ≤ ·) s := by
rw [ ← not_bounded_iff , ← not_bounded_iff , not_iff_not : ∀ {a b : Prop }, (¬ a ↔ ¬ b ) ↔ (a ↔ b ) not_iff_not]
exact bounded_le_inter_le a
#align set.unbounded_le_inter_le Set.unbounded_le_inter_le
/-! #### Less than -/
theorem bounded_lt_inter_not_lt [ SemilatticeSup : Type ?u.23022 → Type ?u.23022 SemilatticeSup α ] ( a : α ) :
Bounded (· < ·) ( s ∩ { b | ¬ b < a }) ↔ Bounded (· < ·) s :=
bounded_inter_not : ∀ {α : Type ?u.23262} {r : α → α → Prop } {s : Set α },
(∀ (a b : α ), ∃ m , ∀ (c : α ), r c a ∨ r c b → r c m ) → ∀ (a : α ), Bounded r (s ∩ { b | ¬ r b a } ) ↔ Bounded r s bounded_inter_not ( fun x y => ⟨ x ⊔ y , fun _ h => h . elim : ∀ {a b c : Prop }, a ∨ b → (a → c ) → (b → c ) → c elim lt_sup_of_lt_left lt_sup_of_lt_right ⟩) a
#align set.bounded_lt_inter_not_lt Set.bounded_lt_inter_not_lt
theorem unbounded_lt_inter_not_lt [ SemilatticeSup : Type ?u.25208 → Type ?u.25208 SemilatticeSup α ] ( a : α ) :
Unbounded (· < ·) ( s ∩ { b | ¬ b < a }) ↔ Unbounded (· < ·) s := by
rw [ ← not_bounded_iff , ← not_bounded_iff , not_iff_not : ∀ {a b : Prop }, (¬ a ↔ ¬ b ) ↔ (a ↔ b ) not_iff_not]
exact bounded_lt_inter_not_lt a
#align set.unbounded_lt_inter_not_lt Set.unbounded_lt_inter_not_lt
theorem bounded_lt_inter_le [ LinearOrder : Type ?u.25567 → Type ?u.25567 LinearOrder α ] ( a : α ) :
Bounded (· < ·) (