mathlib3 documentation

order.conditionally_complete_lattice.basic

Theory of conditionally complete lattices. #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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

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

To differentiate the statements between complete lattices and conditionally complete lattices, we prefix Inf and Sup in the statements by c, giving cInf and cSup. For instance, Inf_le is a statement in complete lattices ensuring Inf s ≤ x, while cInf_le is the same statement in conditionally complete lattices with an additional assumption that s is bounded below.

Extension of Sup and Inf from a preorder α to with_top α and with_bot α

@[protected, instance]
noncomputable def with_top.has_Sup {α : Type u_1} [preorder α] [has_Sup α] :
Equations
@[protected, instance]
noncomputable def with_top.has_Inf {α : Type u_1} [has_Inf α] :
Equations
@[protected, instance]
noncomputable def with_bot.has_Sup {α : Type u_1} [has_Sup α] :
Equations
@[protected, instance]
noncomputable def with_bot.has_Inf {α : Type u_1} [preorder α] [has_Inf α] :
Equations
theorem with_top.Sup_eq {α : Type u_1} [preorder α] [has_Sup α] {s : set (with_top α)} (hs : s) (hs' : bdd_above (coe ⁻¹' s)) :
theorem with_top.Inf_eq {α : Type u_1} [has_Inf α] {s : set (with_top α)} (hs : ¬s {}) :
theorem with_bot.Inf_eq {α : Type u_1} [preorder α] [has_Inf α] {s : set (with_bot α)} (hs : s) (hs' : bdd_below (coe ⁻¹' s)) :
theorem with_bot.Sup_eq {α : Type u_1} [has_Sup α] {s : set (with_bot α)} (hs : ¬s {}) :
@[simp]
theorem with_top.cInf_empty {α : Type u_1} [has_Inf α] :
@[simp]
theorem with_top.cinfi_empty {ι : Sort u_4} {α : Type u_1} [is_empty ι] [has_Inf α] (f : ι with_top α) :
( (i : ι), f i) =
theorem with_top.coe_Inf' {α : Type u_1} [has_Inf α] {s : set α} (hs : s.nonempty) :
@[norm_cast]
theorem with_top.coe_infi {α : Type u_1} {ι : Sort u_4} [nonempty ι] [has_Inf α] (f : ι α) :
( (i : ι), f i) = (i : ι), (f i)
theorem with_top.coe_Sup' {α : Type u_1} [preorder α] [has_Sup α] {s : set α} (hs : bdd_above s) :
@[norm_cast]
theorem with_top.coe_supr {α : Type u_1} {ι : Sort u_4} [preorder α] [has_Sup α] (f : ι α) (h : bdd_above (set.range f)) :
( (i : ι), f i) = (i : ι), (f i)
@[simp]
theorem with_bot.cSup_empty {α : Type u_1} [has_Sup α] :
@[simp]
theorem with_bot.csupr_empty {ι : Sort u_4} {α : Type u_1} [is_empty ι] [has_Sup α] (f : ι with_bot α) :
( (i : ι), f i) =
@[norm_cast]
theorem with_bot.coe_Sup' {α : Type u_1} [has_Sup α] {s : set α} (hs : s.nonempty) :
@[norm_cast]
theorem with_bot.coe_supr {α : Type u_1} {ι : Sort u_4} [nonempty ι] [has_Sup α] (f : ι α) :
( (i : ι), f i) = (i : ι), (f i)
@[norm_cast]
theorem with_bot.coe_Inf' {α : Type u_1} [preorder α] [has_Inf α] {s : set α} (hs : bdd_below s) :
@[norm_cast]
theorem with_bot.coe_infi {α : Type u_1} {ι : Sort u_4} [preorder α] [has_Inf α] (f : ι α) (h : bdd_below (set.range f)) :
( (i : ι), f i) = (i : ι), (f i)
@[class]
structure conditionally_complete_lattice (α : Type u_5) :
Type u_5

A conditionally complete lattice is a lattice in which every nonempty subset which is bounded above has a supremum, and every nonempty subset which is bounded below has an infimum. Typical examples are real numbers or natural numbers.

To differentiate the statements from the corresponding statements in (unconditional) complete lattices, we prefix Inf and Sup by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.

Instances of this typeclass
Instances of other typeclasses for conditionally_complete_lattice
  • conditionally_complete_lattice.has_sizeof_inst
@[class]
structure conditionally_complete_linear_order (α : Type u_5) :
Type u_5

A conditionally complete linear order is a linear order in which every nonempty subset which is bounded above has a supremum, and every nonempty subset which is bounded below has an infimum. Typical examples are real numbers or natural numbers.

To differentiate the statements from the corresponding statements in (unconditional) complete linear orders, we prefix Inf and Sup by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.

Instances of this typeclass
Instances of other typeclasses for conditionally_complete_linear_order
  • conditionally_complete_linear_order.has_sizeof_inst
@[class]
structure conditionally_complete_linear_order_bot (α : Type u_5) :
Type u_5

A conditionally complete linear order with bot is a linear order with least element, in which every nonempty subset which is bounded above has a supremum, and every nonempty subset (necessarily bounded below) has an infimum. A typical example is the natural numbers.

To differentiate the statements from the corresponding statements in (unconditional) complete linear orders, we prefix Inf and Sup by a c everywhere. The same statements should hold in both worlds, sometimes with additional assumptions of nonemptiness or boundedness.

Instances of this typeclass
Instances of other typeclasses for conditionally_complete_linear_order_bot
  • conditionally_complete_linear_order_bot.has_sizeof_inst
@[protected, instance]

A complete lattice is a conditionally complete lattice, as there are no restrictions on the properties of Inf and Sup in a complete lattice.

Equations
@[reducible]

A well founded linear order is conditionally complete, with a bottom element.

Equations
def conditionally_complete_lattice_of_Sup (α : Type u_1) [H1 : partial_order α] [H2 : has_Sup α] (bdd_above_pair : (a b : α), bdd_above {a, b}) (bdd_below_pair : (a b : α), bdd_below {a, b}) (is_lub_Sup : (s : set α), bdd_above s s.nonempty is_lub s (has_Sup.Sup s)) :

Create a conditionally_complete_lattice from a partial_order and Sup function that returns the least upper bound of a nonempty set which is bounded above. Usually this constructor provides poor definitional equalities. If other fields are known explicitly, they should be provided; for example, if inf is known explicitly, construct the conditionally_complete_lattice instance as

instance : conditionally_complete_lattice my_T :=
{ inf := better_inf,
  le_inf := ...,
  inf_le_right := ...,
  inf_le_left := ...
  -- don't care to fix sup, Inf
  ..conditionally_complete_lattice_of_Sup my_T _ }
Equations
def conditionally_complete_lattice_of_Inf (α : Type u_1) [H1 : partial_order α] [H2 : has_Inf α] (bdd_above_pair : (a b : α), bdd_above {a, b}) (bdd_below_pair : (a b : α), bdd_below {a, b}) (is_glb_Inf : (s : set α), bdd_below s s.nonempty is_glb s (has_Inf.Inf s)) :

Create a conditionally_complete_lattice_of_Inf from a partial_order and Inf function that returns the greatest lower bound of a nonempty set which is bounded below. Usually this constructor provides poor definitional equalities. If other fields are known explicitly, they should be provided; for example, if inf is known explicitly, construct the conditionally_complete_lattice instance as

instance : conditionally_complete_lattice my_T :=
{ inf := better_inf,
  le_inf := ...,
  inf_le_right := ...,
  inf_le_left := ...
  -- don't care to fix sup, Sup
  ..conditionally_complete_lattice_of_Inf my_T _ }
Equations

A version of conditionally_complete_lattice_of_Sup when we already know that α is a lattice.

This should only be used when it is both hard and unnecessary to provide Inf explicitly.

Equations

A version of conditionally_complete_lattice_of_Inf when we already know that α is a lattice.

This should only be used when it is both hard and unnecessary to provide Sup explicitly.

Equations
theorem le_cSup {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h₁ : bdd_above s) (h₂ : a s) :
theorem cSup_le {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h₁ : s.nonempty) (h₂ : (b : α), b s b a) :
theorem cInf_le {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h₁ : bdd_below s) (h₂ : a s) :
theorem le_cInf {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h₁ : s.nonempty) (h₂ : (b : α), b s a b) :
theorem le_cSup_of_le {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a b : α} (hs : bdd_above s) (hb : b s) (h : a b) :
theorem cInf_le_of_le {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a b : α} (hs : bdd_below s) (hb : b s) (h : b a) :
theorem cSup_le_cSup {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (ht : bdd_above t) (hs : s.nonempty) (h : s t) :
theorem cInf_le_cInf {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (ht : bdd_below t) (hs : s.nonempty) (h : s t) :
theorem le_cSup_iff {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h : bdd_above s) (hs : s.nonempty) :
a has_Sup.Sup s (b : α), b upper_bounds s a b
theorem cInf_le_iff {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (h : bdd_below s) (hs : s.nonempty) :
has_Inf.Inf s a (b : α), b lower_bounds s b a
theorem is_lub_cSup {α : Type u_1} [conditionally_complete_lattice α] {s : set α} (ne : s.nonempty) (H : bdd_above s) :
theorem is_lub_csupr {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} (H : bdd_above (set.range f)) :
is_lub (set.range f) ( (i : ι), f i)
theorem is_lub_csupr_set {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {f : β α} {s : set β} (H : bdd_above (f '' s)) (Hne : s.nonempty) :
is_lub (f '' s) ( (i : s), f i)
theorem is_glb_cInf {α : Type u_1} [conditionally_complete_lattice α] {s : set α} (ne : s.nonempty) (H : bdd_below s) :
theorem is_glb_cinfi {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} (H : bdd_below (set.range f)) :
is_glb (set.range f) ( (i : ι), f i)
theorem is_glb_cinfi_set {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {f : β α} {s : set β} (H : bdd_below (f '' s)) (Hne : s.nonempty) :
is_glb (f '' s) ( (i : s), f i)
theorem csupr_le_iff {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} {a : α} (hf : bdd_above (set.range f)) :
supr f a (i : ι), f i a
theorem le_cinfi_iff {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} {a : α} (hf : bdd_below (set.range f)) :
a infi f (i : ι), a f i
theorem csupr_set_le_iff {α : Type u_1} [conditionally_complete_lattice α] {ι : Type u_2} {s : set ι} {f : ι α} {a : α} (hs : s.nonempty) (hf : bdd_above (f '' s)) :
( (i : s), f i) a (i : ι), i s f i a
theorem le_cinfi_set_iff {α : Type u_1} [conditionally_complete_lattice α] {ι : Type u_2} {s : set ι} {f : ι α} {a : α} (hs : s.nonempty) (hf : bdd_below (f '' s)) :
(a (i : s), f i) (i : ι), i s a f i
theorem is_lub.cSup_eq {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_lub s a) (ne : s.nonempty) :
theorem is_lub.csupr_eq {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {a : α} [nonempty ι] {f : ι α} (H : is_lub (set.range f) a) :
( (i : ι), f i) = a
theorem is_lub.csupr_set_eq {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {a : α} {s : set β} {f : β α} (H : is_lub (f '' s) a) (Hne : s.nonempty) :
( (i : s), f i) = a
theorem is_greatest.cSup_eq {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_greatest s a) :

A greatest element of a set is the supremum of this set.

theorem is_greatest.Sup_mem {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_greatest s a) :
theorem is_glb.cInf_eq {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_glb s a) (ne : s.nonempty) :
theorem is_glb.cinfi_eq {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {a : α} [nonempty ι] {f : ι α} (H : is_glb (set.range f) a) :
( (i : ι), f i) = a
theorem is_glb.cinfi_set_eq {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {a : α} {s : set β} {f : β α} (H : is_glb (f '' s) a) (Hne : s.nonempty) :
( (i : s), f i) = a
theorem is_least.cInf_eq {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_least s a) :

A least element of a set is the infimum of this set.

theorem is_least.Inf_mem {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (H : is_least s a) :
theorem subset_Icc_cInf_cSup {α : Type u_1} [conditionally_complete_lattice α] {s : set α} (hb : bdd_below s) (ha : bdd_above s) :
theorem cSup_le_iff {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (hb : bdd_above s) (hs : s.nonempty) :
has_Sup.Sup s a (b : α), b s b a
theorem le_cInf_iff {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (hb : bdd_below s) (hs : s.nonempty) :
a has_Inf.Inf s (b : α), b s a b
theorem not_mem_of_lt_cInf {α : Type u_1} [conditionally_complete_lattice α] {x : α} {s : set α} (h : x < has_Inf.Inf s) (hs : bdd_below s) :
x s
theorem not_mem_of_cSup_lt {α : Type u_1} [conditionally_complete_lattice α] {x : α} {s : set α} (h : has_Sup.Sup s < x) (hs : bdd_above s) :
x s
theorem cSup_eq_of_forall_le_of_forall_lt_exists_gt {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {b : α} (hs : s.nonempty) (H : (a : α), a s a b) (H' : (w : α), w < b ( (a : α) (H : a s), w < a)) :

Introduction rule to prove that b is the supremum of s: it suffices to check that b is larger than all elements of s, and that this is not the case of any w<b. See Sup_eq_of_forall_le_of_forall_lt_exists_gt for a version in complete lattices.

theorem cInf_eq_of_forall_ge_of_forall_gt_exists_lt {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {b : α} :
s.nonempty ( (a : α), a s b a) ( (w : α), b < w ( (a : α) (H : a s), a < w)) has_Inf.Inf s = b

Introduction rule to prove that b is the infimum of s: it suffices to check that b is smaller than all elements of s, and that this is not the case of any w>b. See Inf_eq_of_forall_ge_of_forall_gt_exists_lt for a version in complete lattices.

theorem lt_cSup_of_lt {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a b : α} (hs : bdd_above s) (ha : a s) (h : b < a) :

b < Sup s when there is an element a in s with b < a, when s is bounded above. This is essentially an iff, except that the assumptions for the two implications are slightly different (one needs boundedness above for one direction, nonemptiness and linear order for the other one), so we formulate separately the two implications, contrary to the complete_lattice case.

theorem cInf_lt_of_lt {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a b : α} :

Inf s < b when there is an element a in s with a < b, when s is bounded below. This is essentially an iff, except that the assumptions for the two implications are slightly different (one needs boundedness below for one direction, nonemptiness and linear order for the other one), so we formulate separately the two implications, contrary to the complete_lattice case.

theorem exists_between_of_forall_le {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (sne : s.nonempty) (tne : t.nonempty) (hst : (x : α), x s (y : α), y t x y) :

If all elements of a nonempty set s are less than or equal to all elements of a nonempty set t, then there exists an element between these sets.

@[simp]
theorem cSup_singleton {α : Type u_1} [conditionally_complete_lattice α] (a : α) :

The supremum of a singleton is the element of the singleton

@[simp]
theorem cInf_singleton {α : Type u_1} [conditionally_complete_lattice α] (a : α) :

The infimum of a singleton is the element of the singleton

@[simp]
theorem cSup_pair {α : Type u_1} [conditionally_complete_lattice α] (a b : α) :
has_Sup.Sup {a, b} = a b
@[simp]
theorem cInf_pair {α : Type u_1} [conditionally_complete_lattice α] (a b : α) :
has_Inf.Inf {a, b} = a b
theorem cInf_le_cSup {α : Type u_1} [conditionally_complete_lattice α] {s : set α} (hb : bdd_below s) (ha : bdd_above s) (ne : s.nonempty) :

If a set is bounded below and above, and nonempty, its infimum is less than or equal to its supremum.

theorem cSup_union {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (hs : bdd_above s) (sne : s.nonempty) (ht : bdd_above t) (tne : t.nonempty) :

The sup of a union of two sets is the max of the suprema of each subset, under the assumptions that all sets are bounded above and nonempty.

theorem cInf_union {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (hs : bdd_below s) (sne : s.nonempty) (ht : bdd_below t) (tne : t.nonempty) :

The inf of a union of two sets is the min of the infima of each subset, under the assumptions that all sets are bounded below and nonempty.

theorem cSup_inter_le {α : Type u_1} [conditionally_complete_lattice α] {s t : set α} (hs : bdd_above s) (ht : bdd_above t) (hst : (s t).nonempty) :

The supremum of an intersection of two sets is bounded by the minimum of the suprema of each set, if all sets are bounded above and nonempty.

The infimum of an intersection of two sets is bounded below by the maximum of the infima of each set, if all sets are bounded below and nonempty.

theorem cSup_insert {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (hs : bdd_above s) (sne : s.nonempty) :

The supremum of insert a s is the maximum of a and the supremum of s, if s is nonempty and bounded above.

theorem cInf_insert {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {a : α} (hs : bdd_below s) (sne : s.nonempty) :

The infimum of insert a s is the minimum of a and the infimum of s, if s is nonempty and bounded below.

@[simp]
theorem cInf_Icc {α : Type u_1} [conditionally_complete_lattice α] {a b : α} (h : a b) :
@[simp]
theorem cInf_Ici {α : Type u_1} [conditionally_complete_lattice α] {a : α} :
@[simp]
theorem cInf_Ico {α : Type u_1} [conditionally_complete_lattice α] {a b : α} (h : a < b) :
@[simp]
theorem cInf_Ioc {α : Type u_1} [conditionally_complete_lattice α] {a b : α} [densely_ordered α] (h : a < b) :
@[simp]
theorem cInf_Ioi {α : Type u_1} [conditionally_complete_lattice α] {a : α} [no_max_order α] [densely_ordered α] :
@[simp]
theorem cInf_Ioo {α : Type u_1} [conditionally_complete_lattice α] {a b : α} [densely_ordered α] (h : a < b) :
@[simp]
theorem cSup_Icc {α : Type u_1} [conditionally_complete_lattice α] {a b : α} (h : a b) :
@[simp]
theorem cSup_Ico {α : Type u_1} [conditionally_complete_lattice α] {a b : α} [densely_ordered α] (h : a < b) :
@[simp]
theorem cSup_Iic {α : Type u_1} [conditionally_complete_lattice α] {a : α} :
@[simp]
theorem cSup_Iio {α : Type u_1} [conditionally_complete_lattice α] {a : α} [no_min_order α] [densely_ordered α] :
@[simp]
theorem cSup_Ioc {α : Type u_1} [conditionally_complete_lattice α] {a b : α} (h : a < b) :
@[simp]
theorem cSup_Ioo {α : Type u_1} [conditionally_complete_lattice α] {a b : α} [densely_ordered α] (h : a < b) :
theorem csupr_le {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} {c : α} (H : (x : ι), f x c) :
supr f c

The indexed supremum of a function is bounded above by a uniform bound

theorem le_csupr {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {f : ι α} (H : bdd_above (set.range f)) (c : ι) :
f c supr f

The indexed supremum of a function is bounded below by the value taken at one point

theorem le_csupr_of_le {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {a : α} {f : ι α} (H : bdd_above (set.range f)) (c : ι) (h : a f c) :
a supr f
theorem csupr_mono {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {f g : ι α} (B : bdd_above (set.range g)) (H : (x : ι), f x g x) :

The indexed supremum of two functions are comparable if the functions are pointwise comparable

theorem le_csupr_set {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {f : β α} {s : set β} (H : bdd_above (f '' s)) {c : β} (hc : c s) :
f c (i : s), f i
theorem cinfi_mono {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {f g : ι α} (B : bdd_below (set.range f)) (H : (x : ι), f x g x) :

The indexed infimum of two functions are comparable if the functions are pointwise comparable

theorem le_cinfi {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [nonempty ι] {f : ι α} {c : α} (H : (x : ι), c f x) :
c infi f

The indexed minimum of a function is bounded below by a uniform lower bound

theorem cinfi_le {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {f : ι α} (H : bdd_below (set.range f)) (c : ι) :
infi f f c

The indexed infimum of a function is bounded above by the value taken at one point

theorem cinfi_le_of_le {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {a : α} {f : ι α} (H : bdd_below (set.range f)) (c : ι) (h : f c a) :
infi f a
theorem cinfi_set_le {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] {f : β α} {s : set β} (H : bdd_below (f '' s)) {c : β} (hc : c s) :
( (i : s), f i) f c
@[simp]
theorem csupr_const {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [hι : nonempty ι] {a : α} :
( (b : ι), a) = a
@[simp]
theorem cinfi_const {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [hι : nonempty ι] {a : α} :
( (b : ι), a) = a
@[simp]
theorem supr_unique {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [unique ι] {s : ι α} :
( (i : ι), s i) = s inhabited.default
@[simp]
theorem infi_unique {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] [unique ι] {s : ι α} :
( (i : ι), s i) = s inhabited.default
@[simp]
theorem csupr_pos {α : Type u_1} [conditionally_complete_lattice α] {p : Prop} {f : p α} (hp : p) :
( (h : p), f h) = f hp
@[simp]
theorem cinfi_pos {α : Type u_1} [conditionally_complete_lattice α] {p : Prop} {f : p α} (hp : p) :
( (h : p), f h) = f hp
theorem csupr_eq_of_forall_le_of_forall_lt_exists_gt {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {b : α} [nonempty ι] {f : ι α} (h₁ : (i : ι), f i b) (h₂ : (w : α), w < b ( (i : ι), w < f i)) :
( (i : ι), f i) = b

Introduction rule to prove that b is the supremum of f: it suffices to check that b is larger than f i for all i, and that this is not the case of any w<b. See supr_eq_of_forall_le_of_forall_lt_exists_gt for a version in complete lattices.

theorem cinfi_eq_of_forall_ge_of_forall_gt_exists_lt {α : Type u_1} {ι : Sort u_4} [conditionally_complete_lattice α] {b : α} [nonempty ι] {f : ι α} (h₁ : (i : ι), b f i) (h₂ : (w : α), b < w ( (i : ι), f i < w)) :
( (i : ι), f i) = b

Introduction rule to prove that b is the infimum of f: it suffices to check that b is smaller than f i for all i, and that this is not the case of any w>b. See infi_eq_of_forall_ge_of_forall_gt_exists_lt for a version in complete lattices.

theorem monotone.csupr_mem_Inter_Icc_of_antitone {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [semilattice_sup β] {f g : β α} (hf : monotone f) (hg : antitone g) (h : f g) :
( (n : β), f n) (n : β), set.Icc (f n) (g n)

Nested intervals lemma: if f is a monotone sequence, g is an antitone sequence, and f n ≤ g n for all n, then ⨆ n, f n belongs to all the intervals [f n, g n].

theorem csupr_mem_Inter_Icc_of_antitone_Icc {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [semilattice_sup β] {f g : β α} (h : antitone (λ (n : β), set.Icc (f n) (g n))) (h' : (n : β), f n g n) :
( (n : β), f n) (n : β), set.Icc (f n) (g n)

Nested intervals lemma: if [f n, g n] is an antitone sequence of nonempty closed intervals, then ⨆ n, f n belongs to all the intervals [f n, g n].

theorem cSup_eq_of_is_forall_le_of_forall_le_imp_ge {α : Type u_1} [conditionally_complete_lattice α] {s : set α} {b : α} (hs : s.nonempty) (h_is_ub : (a : α), a s a b) (h_b_le_ub : (ub : α), ( (a : α), a s a ub) b ub) :

Introduction rule to prove that b is the supremum of s: it suffices to check that

  1. b is an upper bound
  2. every other upper bound b' satisfies b ≤ b'.
theorem exists_lt_of_lt_cSup {α : Type u_1} [conditionally_complete_linear_order α] {s : set α} {b : α} (hs : s.nonempty) (hb : b < has_Sup.Sup s) :
(a : α) (H : a s), b < a

When b < Sup s, there is an element a in s with b < a, if s is nonempty and the order is a linear order.

theorem exists_lt_of_lt_csupr {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order α] {b : α} [nonempty ι] {f : ι α} (h : b < supr f) :
(i : ι), b < f i

Indexed version of the above lemma exists_lt_of_lt_cSup. When b < supr f, there is an element i such that b < f i.

theorem exists_lt_of_cInf_lt {α : Type u_1} [conditionally_complete_linear_order α] {s : set α} {b : α} (hs : s.nonempty) (hb : has_Inf.Inf s < b) :
(a : α) (H : a s), a < b

When Inf s < b, there is an element a in s with a < b, if s is nonempty and the order is a linear order.

theorem exists_lt_of_cinfi_lt {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order α] {a : α} [nonempty ι] {f : ι α} (h : infi f < a) :
(i : ι), f i < a

Indexed version of the above lemma exists_lt_of_cInf_lt When infi f < a, there is an element i such that f i < a.

theorem infi_mem {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order α] [is_well_order α has_lt.lt] [nonempty ι] (f : ι α) :
theorem monotone_on.map_Inf {α : Type u_1} [conditionally_complete_linear_order α] {s : set α} [is_well_order α has_lt.lt] {β : Type u_2} [conditionally_complete_lattice β] {f : α β} (hf : monotone_on f s) (hs : s.nonempty) :
theorem monotone.map_Inf {α : Type u_1} [conditionally_complete_linear_order α] {s : set α} [is_well_order α has_lt.lt] {β : Type u_2} [conditionally_complete_lattice β] {f : α β} (hf : monotone f) (hs : s.nonempty) :

Lemmas about a conditionally complete linear order with bottom element #

In this case we have Sup ∅ = ⊥, so we can drop some nonempty/set.nonempty assumptions.

@[simp]
theorem csupr_of_empty {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] [is_empty ι] (f : ι α) :
( (i : ι), f i) =
@[simp]
theorem csupr_false {α : Type u_1} [conditionally_complete_linear_order_bot α] (f : false α) :
( (i : false), f i) =
theorem is_lub_cSup' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} (hs : bdd_above s) :
theorem cSup_le_iff' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} (hs : bdd_above s) {a : α} :
has_Sup.Sup s a (x : α), x s x a
theorem cSup_le' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} {a : α} (h : a upper_bounds s) :
theorem le_cSup_iff' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} {a : α} (h : bdd_above s) :
a has_Sup.Sup s (b : α), b upper_bounds s a b
theorem le_csupr_iff' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] {s : ι α} {a : α} (h : bdd_above (set.range s)) :
a supr s (b : α), ( (i : ι), s i b) a b
theorem le_cInf_iff'' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} {a : α} (ne : s.nonempty) :
a has_Inf.Inf s (b : α), b s a b
theorem le_cinfi_iff' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] [nonempty ι] {f : ι α} {a : α} :
a infi f (i : ι), a f i
theorem cInf_le' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} {a : α} (h : a s) :
theorem cinfi_le' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] (f : ι α) (i : ι) :
infi f f i
theorem exists_lt_of_lt_cSup' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} {a : α} (h : a < has_Sup.Sup s) :
(b : α) (H : b s), a < b
theorem csupr_le_iff' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] {f : ι α} (h : bdd_above (set.range f)) {a : α} :
( (i : ι), f i) a (i : ι), f i a
theorem csupr_le' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] {f : ι α} {a : α} (h : (i : ι), f i a) :
( (i : ι), f i) a
theorem exists_lt_of_lt_csupr' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] {f : ι α} {a : α} (h : a < (i : ι), f i) :
(i : ι), a < f i
theorem csupr_mono' {α : Type u_1} {ι : Sort u_4} [conditionally_complete_linear_order_bot α] {ι' : Sort u_2} {f : ι α} {g : ι' α} (hg : bdd_above (set.range g)) (h : (i : ι), (i' : ι'), f i g i') :
theorem cInf_le_cInf' {α : Type u_1} [conditionally_complete_linear_order_bot α] {s t : set α} (h₁ : t.nonempty) (h₂ : t s) :
theorem with_top.is_lub_Sup' {β : Type u_1} [conditionally_complete_lattice β] {s : set (with_top β)} (hs : s.nonempty) :

The Sup of a non-empty set is its least upper bound for a conditionally complete lattice with a top.

theorem with_top.is_glb_Inf' {β : Type u_1} [conditionally_complete_lattice β] {s : set (with_top β)} (hs : bdd_below s) :

The Inf of a bounded-below set is its greatest lower bound for a conditionally complete lattice with a top.

@[norm_cast]
theorem with_top.coe_Sup {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} (hb : bdd_above s) :
(has_Sup.Sup s) = (a : α) (H : a s), a

A version of with_top.coe_Sup' with a more convenient but less general statement.

@[norm_cast]
theorem with_top.coe_Inf {α : Type u_1} [conditionally_complete_linear_order_bot α] {s : set α} (hs : s.nonempty) :
(has_Inf.Inf s) = (a : α) (H : a s), a

A version of with_top.coe_Inf' with a more convenient but less general statement.

A monotone function into a conditionally complete lattice preserves the ordering properties of Sup and Inf.

theorem monotone.le_cSup_image {α : Type u_1} {β : Type u_2} [preorder α] [conditionally_complete_lattice β] {f : α β} (h_mono : monotone f) {s : set α} {c : α} (hcs : c s) (h_bdd : bdd_above s) :
f c has_Sup.Sup (f '' s)
theorem monotone.cSup_image_le {α : Type u_1} {β : Type u_2} [preorder α] [conditionally_complete_lattice β] {f : α β} (h_mono : monotone f) {s : set α} (hs : s.nonempty) {B : α} (hB : B upper_bounds s) :
has_Sup.Sup (f '' s) f B
theorem monotone.cInf_image_le {α : Type u_1} {β : Type u_2} [preorder α] [conditionally_complete_lattice β] {f : α β} (h_mono : monotone f) {s : set α} {c : α} (hcs : c s) (h_bdd : bdd_below s) :
has_Inf.Inf (f '' s) f c
theorem monotone.le_cInf_image {α : Type u_1} {β : Type u_2} [preorder α] [conditionally_complete_lattice β] {f : α β} (h_mono : monotone f) {s : set α} (hs : s.nonempty) {B : α} (hB : B lower_bounds s) :
f B has_Inf.Inf (f '' s)
theorem galois_connection.l_cSup {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set α} (hne : s.nonempty) (hbdd : bdd_above s) :
l (has_Sup.Sup s) = (x : s), l x
theorem galois_connection.l_cSup' {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set α} (hne : s.nonempty) (hbdd : bdd_above s) :
theorem galois_connection.l_csupr {α : Type u_1} {β : Type u_2} {ι : Sort u_4} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [nonempty ι] {l : α β} {u : β α} (gc : galois_connection l u) {f : ι α} (hf : bdd_above (set.range f)) :
l ( (i : ι), f i) = (i : ι), l (f i)
theorem galois_connection.l_csupr_set {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set γ} {f : γ α} (hf : bdd_above (f '' s)) (hne : s.nonempty) :
l ( (i : s), f i) = (i : s), l (f i)
theorem galois_connection.u_cInf {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set β} (hne : s.nonempty) (hbdd : bdd_below s) :
u (has_Inf.Inf s) = (x : s), u x
theorem galois_connection.u_cInf' {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set β} (hne : s.nonempty) (hbdd : bdd_below s) :
theorem galois_connection.u_cinfi {α : Type u_1} {β : Type u_2} {ι : Sort u_4} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [nonempty ι] {l : α β} {u : β α} (gc : galois_connection l u) {f : ι β} (hf : bdd_below (set.range f)) :
u ( (i : ι), f i) = (i : ι), u (f i)
theorem galois_connection.u_cinfi_set {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] {l : α β} {u : β α} (gc : galois_connection l u) {s : set γ} {f : γ β} (hf : bdd_below (f '' s)) (hne : s.nonempty) :
u ( (i : s), f i) = (i : s), u (f i)
theorem order_iso.map_cSup {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set α} (hne : s.nonempty) (hbdd : bdd_above s) :
e (has_Sup.Sup s) = (x : s), e x
theorem order_iso.map_cSup' {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set α} (hne : s.nonempty) (hbdd : bdd_above s) :
theorem order_iso.map_csupr {α : Type u_1} {β : Type u_2} {ι : Sort u_4} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [nonempty ι] (e : α ≃o β) {f : ι α} (hf : bdd_above (set.range f)) :
e ( (i : ι), f i) = (i : ι), e (f i)
theorem order_iso.map_csupr_set {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set γ} {f : γ α} (hf : bdd_above (f '' s)) (hne : s.nonempty) :
e ( (i : s), f i) = (i : s), e (f i)
theorem order_iso.map_cInf {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set α} (hne : s.nonempty) (hbdd : bdd_below s) :
e (has_Inf.Inf s) = (x : s), e x
theorem order_iso.map_cInf' {α : Type u_1} {β : Type u_2} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set α} (hne : s.nonempty) (hbdd : bdd_below s) :
theorem order_iso.map_cinfi {α : Type u_1} {β : Type u_2} {ι : Sort u_4} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [nonempty ι] (e : α ≃o β) {f : ι α} (hf : bdd_below (set.range f)) :
e ( (i : ι), f i) = (i : ι), e (f i)
theorem order_iso.map_cinfi_set {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] (e : α ≃o β) {s : set γ} {f : γ α} (hf : bdd_below (f '' s)) (hne : s.nonempty) :
e ( (i : s), f i) = (i : s), e (f i)

Supremum/infimum of set.image2 #

A collection of lemmas showing what happens to the suprema/infima of s and t when mapped under a binary function whose partial evaluations are lower/upper adjoints of Galois connections.

theorem cSup_image2_eq_cSup_cSup {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {l : α β γ} {u₁ : β γ α} {u₂ : α γ β} (h₁ : (b : β), galois_connection (function.swap l b) (u₁ b)) (h₂ : (a : α), galois_connection (l a) (u₂ a)) (hs₀ : s.nonempty) (hs₁ : bdd_above s) (ht₀ : t.nonempty) (ht₁ : bdd_above t) :
theorem cSup_image2_eq_cSup_cInf {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {l : α β γ} {u₁ : β γ α} {u₂ : α γ β} (h₁ : (b : β), galois_connection (function.swap l b) (u₁ b)) (h₂ : (a : α), galois_connection (l a order_dual.of_dual) (order_dual.to_dual u₂ a)) :
theorem cSup_image2_eq_cInf_cSup {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {l : α β γ} {u₁ : β γ α} {u₂ : α γ β} (h₁ : (b : β), galois_connection (function.swap l b order_dual.of_dual) (order_dual.to_dual u₁ b)) (h₂ : (a : α), galois_connection (l a) (u₂ a)) :
theorem cSup_image2_eq_cInf_cInf {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {l : α β γ} {u₁ : β γ α} {u₂ : α γ β} (h₁ : (b : β), galois_connection (function.swap l b order_dual.of_dual) (order_dual.to_dual u₁ b)) (h₂ : (a : α), galois_connection (l a order_dual.of_dual) (order_dual.to_dual u₂ a)) :
theorem cInf_image2_eq_cInf_cInf {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {u : α β γ} {l₁ : β γ α} {l₂ : α γ β} (h₁ : (b : β), galois_connection (l₁ b) (function.swap u b)) (h₂ : (a : α), galois_connection (l₂ a) (u a)) :
theorem cInf_image2_eq_cInf_cSup {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {u : α β γ} {l₁ : β γ α} {l₂ : α γ β} (h₁ : (b : β), galois_connection (l₁ b) (function.swap u b)) (h₂ : (a : α), galois_connection (order_dual.to_dual l₂ a) (u a order_dual.of_dual)) :
theorem cInf_image2_eq_cSup_cInf {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {u : α β γ} {l₁ : β γ α} {l₂ : α γ β} (h₁ : (b : β), galois_connection (order_dual.to_dual l₁ b) (function.swap u b order_dual.of_dual)) (h₂ : (a : α), galois_connection (l₂ a) (u a)) :
theorem cInf_image2_eq_cSup_cSup {α : Type u_1} {β : Type u_2} {γ : Type u_3} [conditionally_complete_lattice α] [conditionally_complete_lattice β] [conditionally_complete_lattice γ] {s : set α} {t : set β} {u : α β γ} {l₁ : β γ α} {l₂ : α γ β} (h₁ : (b : β), galois_connection (order_dual.to_dual l₁ b) (function.swap u b order_dual.of_dual)) (h₂ : (a : α), galois_connection (order_dual.to_dual l₂ a) (u a order_dual.of_dual)) :

Complete lattice structure on with_top (with_bot α) #

If α is a conditionally_complete_lattice, then we show that with_top α and with_bot α also inherit the structure of conditionally complete lattices. Furthermore, we show that with_top (with_bot α) and with_bot (with_top α) naturally inherit the structure of a complete lattice. Note that for α a conditionally complete lattice, Sup and Inf both return junk values for sets which are empty or unbounded. The extension of Sup to with_top α fixes the unboundedness problem and the extension to with_bot α fixes the problem with the empty set.

This result can be used to show that the extended reals [-∞, ∞] are a complete linear order.

@[protected, instance]

Adding a top element to a conditionally complete lattice gives a conditionally complete lattice

Equations
@[protected, instance]

Adding a bottom element to a conditionally complete lattice gives a conditionally complete lattice

Equations
theorem with_top.supr_coe_eq_top {ι : Sort u_1} {α : Type u_2} [conditionally_complete_linear_order_bot α] (f : ι α) :
( (x : ι), (f x)) = ¬bdd_above (set.range f)
theorem with_top.supr_coe_lt_top {ι : Sort u_1} {α : Type u_2} [conditionally_complete_linear_order_bot α] (f : ι α) :
( (x : ι), (f x)) < bdd_above (set.range f)