Atoms, Coatoms, and Simple Lattices #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This module defines atoms, which are minimal non-⊥
elements in bounded lattices, simple lattices,
which are lattices with only two elements, and related ideas.
Main definitions #
Atoms and Coatoms #
is_atom a
indicates that the only element belowa
is⊥
.is_coatom a
indicates that the only element abovea
is⊤
.
Atomic and Atomistic Lattices #
is_atomic
indicates that every element other than⊥
is above an atom.is_coatomic
indicates that every element other than⊤
is below a coatom.is_atomistic
indicates that every element is theSup
of a set of atoms.is_coatomistic
indicates that every element is theInf
of a set of coatoms.
Simple Lattices #
is_simple_order
indicates that an order has only two unique elements,⊥
and⊤
.is_simple_order.bounded_order
is_simple_order.distrib_lattice
- Given an instance of
is_simple_order
, we provide the following definitions. These are not made global instances as they contain data :
Main results #
is_atom_dual_iff_is_coatom
andis_coatom_dual_iff_is_atom
express the (definitional) duality ofis_atom
andis_coatom
.is_simple_order_iff_is_atom_top
andis_simple_order_iff_is_coatom_bot
express the connection between atoms, coatoms, and simple latticesis_compl.is_atom_iff_is_coatom
andis_compl.is_coatom_if_is_atom
: In a modular bounded lattice, a complement of an atom is a coatom and vice versa.is_atomic_iff_is_coatomic
: A modular complemented lattice is atomic iff it is coatomic.
Alias of the forward direction of bot_covby_iff
.
Alias of the reverse direction of bot_covby_iff
.
Alias of the reverse direction of is_coatom_dual_iff_is_atom
.
Alias of the reverse direction of is_atom_dual_iff_is_coatom
.
Alias of the forward direction of covby_top_iff
.
Alias of the reverse direction of covby_top_iff
.
A lattice is atomic iff every element other than ⊥
has an atom below it.
A lattice is coatomic iff every element other than ⊤
has a coatom above it.
A lattice is atomistic iff every element is a Sup
of a set of atoms.
A lattice is coatomistic iff every element is an Inf
of a set of coatoms.
Instances of this typeclass
An order is simple iff it has exactly two elements, ⊥
and ⊤
.
A simple bounded_order
induces a preorder. This is not an instance to prevent loops.
A simple partial ordered bounded_order
induces a linear order.
This is not an instance to prevent loops.
Equations
- is_simple_order.linear_order = {le := partial_order.le infer_instance, lt := partial_order.lt infer_instance, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := λ (a b : α), dite (a = ⊥) (λ (ha : a = ⊥), decidable.is_true _) (λ (ha : ¬a = ⊥), dite (b = ⊤) (λ (hb : b = ⊤), decidable.is_true _) (λ (hb : ¬b = ⊤), decidable.is_false _)), decidable_eq := _inst_4, decidable_lt := decidable_lt_of_decidable_le (λ (a b : α), dite (a = ⊥) (λ (ha : a = ⊥), decidable.is_true _) (λ (ha : ¬a = ⊥), dite (b = ⊤) (λ (hb : b = ⊤), decidable.is_true _) (λ (hb : ¬b = ⊤), decidable.is_false _))), max := max_default (λ (a b : α), dite (a = ⊥) (λ (ha : a = ⊥), decidable.is_true _) (λ (ha : ¬a = ⊥), dite (b = ⊤) (λ (hb : b = ⊤), decidable.is_true _) (λ (hb : ¬b = ⊤), decidable.is_false _))), max_def := _, min := min_default (λ (a b : α), dite (a = ⊥) (λ (ha : a = ⊥), decidable.is_true _) (λ (ha : ¬a = ⊥), dite (b = ⊤) (λ (hb : b = ⊤), decidable.is_true _) (λ (hb : ¬b = ⊤), decidable.is_false _))), min_def := _}
Alias of is_simple_order.eq_bot_of_lt
.
Alias of is_simple_order.eq_top_of_lt
.
A simple partial ordered bounded_order
induces a lattice.
This is not an instance to prevent loops
Equations
A lattice that is a bounded_order
is a distributive lattice.
This is not an instance to prevent loops
Equations
- is_simple_order.distrib_lattice = {sup := lattice.sup infer_instance, le := lattice.le infer_instance, lt := lattice.lt infer_instance, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf infer_instance, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _}
Every simple lattice is isomorphic to bool
, regardless of order.
Every simple lattice over a partial order is order-isomorphic to bool
.
Equations
- is_simple_order.order_iso_bool = {to_equiv := {to_fun := is_simple_order.equiv_bool.to_fun, inv_fun := is_simple_order.equiv_bool.inv_fun, left_inv := _, right_inv := _}, map_rel_iff' := _}
A simple bounded_order
is also a boolean_algebra
.
Equations
- is_simple_order.boolean_algebra = {sup := distrib_lattice.sup is_simple_order.distrib_lattice, le := distrib_lattice.le is_simple_order.distrib_lattice, lt := distrib_lattice.lt is_simple_order.distrib_lattice, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := distrib_lattice.inf is_simple_order.distrib_lattice, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _, compl := λ (x : α), ite (x = ⊥) ⊤ ⊥, sdiff := λ (x y : α), ite (x = ⊤ ∧ y = ⊥) ⊤ ⊥, himp := λ (x y : α), distrib_lattice.sup y (ite (x = ⊥) ⊤ ⊥), top := bounded_order.top (show bounded_order α, from _inst_7), bot := bounded_order.bot (show bounded_order α, from _inst_7), inf_compl_le_bot := _, top_le_sup_compl := _, le_top := _, bot_le := _, sdiff_eq := _, himp_eq := _}
A simple bounded_order
is also complete.
Equations
- is_simple_order.complete_lattice = {sup := lattice.sup infer_instance, le := lattice.le infer_instance, lt := lattice.lt infer_instance, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf infer_instance, inf_le_left := _, inf_le_right := _, le_inf := _, Sup := λ (s : set α), ite (⊤ ∈ s) ⊤ ⊥, le_Sup := _, Sup_le := _, Inf := λ (s : set α), ite (⊥ ∈ s) ⊥ ⊤, Inf_le := _, le_Inf := _, top := bounded_order.top infer_instance, bot := bounded_order.bot infer_instance, le_top := _, bot_le := _}
A simple bounded_order
is also a complete_boolean_algebra
.
Equations
- is_simple_order.complete_boolean_algebra = {sup := complete_lattice.sup is_simple_order.complete_lattice, le := complete_lattice.le is_simple_order.complete_lattice, lt := complete_lattice.lt is_simple_order.complete_lattice, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := complete_lattice.inf is_simple_order.complete_lattice, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _, compl := boolean_algebra.compl is_simple_order.boolean_algebra, sdiff := boolean_algebra.sdiff is_simple_order.boolean_algebra, himp := boolean_algebra.himp is_simple_order.boolean_algebra, top := complete_lattice.top is_simple_order.complete_lattice, bot := complete_lattice.bot is_simple_order.complete_lattice, inf_compl_le_bot := _, top_le_sup_compl := _, le_top := _, bot_le := _, sdiff_eq := _, himp_eq := _, Sup := complete_lattice.Sup is_simple_order.complete_lattice, le_Sup := _, Sup_le := _, Inf := complete_lattice.Inf is_simple_order.complete_lattice, Inf_le := _, le_Inf := _, inf_Sup_le_supr_inf := _, infi_sup_le_sup_Inf := _}