Definitions of conditionally complete lattices #
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 sSup s
and sInf 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 express these using the BddAbove
and BddBelow
predicates, which we use to prove
most useful properties of sSup
and sInf
in conditionally complete lattices.
To differentiate the statements between complete lattices and conditionally complete
lattices, we prefix sInf
and sSup
in the statements by c
, giving csInf
and csSup
.
For instance, sInf_le
is a statement in complete lattices ensuring sInf s ≤ x
,
while csInf_le
is the same statement in conditionally complete lattices
with an additional assumption that s
is bounded below.
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 sInf
and sSup
by a c
everywhere. The same statements should
hold in both worlds, sometimes with additional assumptions of nonemptiness or
boundedness.
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- sup : α → α → α
- le_sup_left : ∀ (a b : α), a ≤ SemilatticeSup.sup a b
- le_sup_right : ∀ (a b : α), b ≤ SemilatticeSup.sup a b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → SemilatticeSup.sup a b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), Lattice.inf a b ≤ a
- inf_le_right : ∀ (a b : α), Lattice.inf a b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ Lattice.inf b c
a ≤ sSup s
for alla ∈ s
.- csSup_le : ∀ (s : Set α) (a : α), s.Nonempty → a ∈ upperBounds s → sSup s ≤ a
sSup s ≤ a
for alla ∈ upperBounds s
. sInf s ≤ a
for alla ∈ s
.- le_csInf : ∀ (s : Set α) (a : α), s.Nonempty → a ∈ lowerBounds s → a ≤ sInf s
a ≤ sInf s
for alla ∈ lowerBounds s
.
Instances
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 sInf
and sSup
by a c
everywhere. The same statements should
hold in both worlds, sometimes with additional assumptions of nonemptiness or
boundedness.
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- sup : α → α → α
- le_sup_left : ∀ (a b : α), a ≤ SemilatticeSup.sup a b
- le_sup_right : ∀ (a b : α), b ≤ SemilatticeSup.sup a b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → SemilatticeSup.sup a b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), Lattice.inf a b ≤ a
- inf_le_right : ∀ (a b : α), Lattice.inf a b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ Lattice.inf b c
A
ConditionallyCompleteLinearOrder
is total.- decidableLE : DecidableRel fun (x1 x2 : α) => x1 ≤ x2
In a
ConditionallyCompleteLinearOrder
, we assume the order relations are all decidable. - decidableEq : DecidableEq α
In a
ConditionallyCompleteLinearOrder
, we assume the order relations are all decidable. - decidableLT : DecidableRel fun (x1 x2 : α) => x1 < x2
In a
ConditionallyCompleteLinearOrder
, we assume the order relations are all decidable. If a set is not bounded above, its supremum is by convention
sSup ∅
.If a set is not bounded below, its infimum is by convention
sInf ∅
.
Instances
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 sInf
and sSup
by a c
everywhere. The same statements should
hold in both worlds, sometimes with additional assumptions of nonemptiness or
boundedness.
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- sup : α → α → α
- le_sup_left : ∀ (a b : α), a ≤ SemilatticeSup.sup a b
- le_sup_right : ∀ (a b : α), b ≤ SemilatticeSup.sup a b
- sup_le : ∀ (a b c : α), a ≤ c → b ≤ c → SemilatticeSup.sup a b ≤ c
- inf : α → α → α
- inf_le_left : ∀ (a b : α), Lattice.inf a b ≤ a
- inf_le_right : ∀ (a b : α), Lattice.inf a b ≤ b
- le_inf : ∀ (a b c : α), a ≤ b → a ≤ c → a ≤ Lattice.inf b c
- decidableLE : DecidableRel fun (x1 x2 : α) => x1 ≤ x2
- decidableLT : DecidableRel fun (x1 x2 : α) => x1 < x2
- bot : α
The supremum of the empty set is special-cased to
⊥
Instances
A well founded linear order is conditionally complete, with a bottom element.
Equations
Instances For
Create a ConditionallyCompleteLattice
from a PartialOrder
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
ConditionallyCompleteLattice
instance as
instance : ConditionallyCompleteLattice my_T :=
{ inf := better_inf,
le_inf := ...,
inf_le_right := ...,
inf_le_left := ...
-- don't care to fix sup, sInf
..conditionallyCompleteLatticeOfsSup my_T _ }
Equations
- conditionallyCompleteLatticeOfsSup α bddAbove_pair bddBelow_pair isLUB_sSup = ConditionallyCompleteLattice.mk ⋯ ⋯ ⋯ ⋯
Instances For
Create a ConditionallyCompleteLattice
from a PartialOrder
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
ConditionallyCompleteLattice
instance as
instance : ConditionallyCompleteLattice my_T :=
{ inf := better_inf,
le_inf := ...,
inf_le_right := ...,
inf_le_left := ...
-- don't care to fix sup, sSup
..conditionallyCompleteLatticeOfsInf my_T _ }
Equations
- conditionallyCompleteLatticeOfsInf α bddAbove_pair bddBelow_pair isGLB_sInf = ConditionallyCompleteLattice.mk ⋯ ⋯ ⋯ ⋯
Instances For
A version of conditionallyCompleteLatticeOfsSup
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
- conditionallyCompleteLatticeOfLatticeOfsSup α isLUB_sSup = ConditionallyCompleteLattice.mk ⋯ ⋯ ⋯ ⋯
Instances For
A version of conditionallyCompleteLatticeOfsInf
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
- conditionallyCompleteLatticeOfLatticeOfsInf α isGLB_sInf = ConditionallyCompleteLattice.mk ⋯ ⋯ ⋯ ⋯