# Disjointness and complements #

This file defines Disjoint, Codisjoint, and the IsCompl predicate.

## Main declarations #

• Disjoint x y: two elements of a lattice are disjoint if their inf is the bottom element.
• Codisjoint x y: two elements of a lattice are codisjoint if their join is the top element.
• IsCompl x y: In a bounded lattice, predicate for "x is a complement of y". Note that in a non distributive lattice, an element can have several complements.
• ComplementedLattice α: Typeclass stating that any element of a lattice has a complement.
def Disjoint {α : Type u_1} [] [] (a : α) (b : α) :

Two elements of a lattice are disjoint if their inf is the bottom element. (This generalizes disjoint sets, viewed as members of the subset lattice.)

Note that we define this without reference to ⊓, as this allows us to talk about orders where the infimum is not unique, or where implementing Inf would require additional Decidable arguments.

Equations
Instances For
@[simp]
theorem disjoint_of_subsingleton {α : Type u_1} [] [] {a : α} {b : α} [] :
theorem disjoint_comm {α : Type u_1} [] [] {a : α} {b : α} :
theorem Disjoint.symm {α : Type u_1} [] [] ⦃a : α ⦃b : α :
Disjoint a bDisjoint b a
theorem symmetric_disjoint {α : Type u_1} [] [] :
Symmetric Disjoint
@[simp]
theorem disjoint_bot_left {α : Type u_1} [] [] {a : α} :
@[simp]
theorem disjoint_bot_right {α : Type u_1} [] [] {a : α} :
theorem Disjoint.mono {α : Type u_1} [] [] {a : α} {b : α} {c : α} {d : α} (h₁ : a b) (h₂ : c d) :
Disjoint b dDisjoint a c
theorem Disjoint.mono_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : a b) :
Disjoint b cDisjoint a c
theorem Disjoint.mono_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
b cDisjoint a cDisjoint a b
@[simp]
theorem disjoint_self {α : Type u_1} [] [] {a : α} :
theorem Disjoint.eq_bot_of_self {α : Type u_1} [] [] {a : α} :
Disjoint a aa =

Alias of the forward direction of disjoint_self.

theorem Disjoint.ne {α : Type u_1} [] [] {a : α} {b : α} (ha : a ) (hab : Disjoint a b) :
a b
theorem Disjoint.eq_bot_of_le {α : Type u_1} [] [] {a : α} {b : α} (hab : Disjoint a b) (h : a b) :
a =
theorem Disjoint.eq_bot_of_ge {α : Type u_1} [] [] {a : α} {b : α} (hab : Disjoint a b) :
b ab =
theorem Disjoint.eq_iff {α : Type u_1} [] [] {a : α} {b : α} (hab : Disjoint a b) :
a = b a = b =
theorem Disjoint.ne_iff {α : Type u_1} [] [] {a : α} {b : α} (hab : Disjoint a b) :
a b a b
@[simp]
theorem disjoint_top {α : Type u_1} [] [] {a : α} :
a =
@[simp]
theorem top_disjoint {α : Type u_1} [] [] {a : α} :
a =
theorem disjoint_iff_inf_le {α : Type u_1} [] [] {a : α} {b : α} :
theorem disjoint_iff {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint a b a b =
theorem Disjoint.le_bot {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint a ba b
theorem Disjoint.eq_bot {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint a ba b =
theorem disjoint_assoc {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Disjoint (a b) c Disjoint a (b c)
theorem disjoint_left_comm {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Disjoint a (b c) Disjoint b (a c)
theorem disjoint_right_comm {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Disjoint (a b) c Disjoint (a c) b
theorem Disjoint.inf_left {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : Disjoint a b) :
Disjoint (a c) b
theorem Disjoint.inf_left' {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : Disjoint a b) :
Disjoint (c a) b
theorem Disjoint.inf_right {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : Disjoint a b) :
Disjoint a (b c)
theorem Disjoint.inf_right' {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : Disjoint a b) :
Disjoint a (c b)
theorem Disjoint.of_disjoint_inf_of_le {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : Disjoint (a b) c) (hle : a c) :
theorem Disjoint.of_disjoint_inf_of_le' {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : Disjoint (a b) c) (hle : b c) :
@[simp]
theorem disjoint_sup_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
@[simp]
theorem disjoint_sup_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
theorem Disjoint.sup_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (ha : Disjoint a c) (hb : Disjoint b c) :
Disjoint (a b) c
theorem Disjoint.sup_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} (hb : Disjoint a b) (hc : Disjoint a c) :
Disjoint a (b c)
theorem Disjoint.left_le_of_le_sup_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : a b c) (hd : Disjoint a c) :
a b
theorem Disjoint.left_le_of_le_sup_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : a c b) (hd : Disjoint a c) :
a b
def Codisjoint {α : Type u_1} [] [] (a : α) (b : α) :

Two elements of a lattice are codisjoint if their sup is the top element.

Note that we define this without reference to ⊔, as this allows us to talk about orders where the supremum is not unique, or where implement Sup would require additional Decidable arguments.

Equations
Instances For
theorem Codisjoint_comm {α : Type u_1} [] [] {a : α} {b : α} :
theorem Codisjoint.symm {α : Type u_1} [] [] ⦃a : α ⦃b : α :
theorem symmetric_codisjoint {α : Type u_1} [] [] :
Symmetric Codisjoint
@[simp]
theorem codisjoint_top_left {α : Type u_1} [] [] {a : α} :
@[simp]
theorem codisjoint_top_right {α : Type u_1} [] [] {a : α} :
theorem Codisjoint.mono {α : Type u_1} [] [] {a : α} {b : α} {c : α} {d : α} (h₁ : a b) (h₂ : c d) :
theorem Codisjoint.mono_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : a b) :
theorem Codisjoint.mono_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
b c
@[simp]
theorem codisjoint_self {α : Type u_1} [] [] {a : α} :
a =
theorem Codisjoint.eq_top_of_self {α : Type u_1} [] [] {a : α} :
a =

Alias of the forward direction of codisjoint_self.

theorem Codisjoint.ne {α : Type u_1} [] [] {a : α} {b : α} (ha : a ) (hab : ) :
a b
theorem Codisjoint.eq_top_of_le {α : Type u_1} [] [] {a : α} {b : α} (hab : ) (h : b a) :
a =
theorem Codisjoint.eq_top_of_ge {α : Type u_1} [] [] {a : α} {b : α} (hab : ) :
a bb =
theorem Codisjoint.eq_iff {α : Type u_1} [] [] {a : α} {b : α} (hab : ) :
a = b a = b =
theorem Codisjoint.ne_iff {α : Type u_1} [] [] {a : α} {b : α} (hab : ) :
a b a b
@[simp]
theorem codisjoint_bot {α : Type u_1} [] [] {a : α} :
a =
@[simp]
theorem bot_codisjoint {α : Type u_1} [] [] {a : α} :
a =
theorem Codisjoint.ne_bot_of_ne_top {α : Type u_1} [] [] {a : α} {b : α} (h : ) (ha : a ) :
theorem Codisjoint.ne_bot_of_ne_top' {α : Type u_1} [] [] {a : α} {b : α} (h : ) (hb : b ) :
theorem codisjoint_iff_le_sup {α : Type u_1} [] [] {a : α} {b : α} :
a b
theorem codisjoint_iff {α : Type u_1} [] [] {a : α} {b : α} :
a b =
theorem Codisjoint.top_le {α : Type u_1} [] [] {a : α} {b : α} :
a b
theorem Codisjoint.eq_top {α : Type u_1} [] [] {a : α} {b : α} :
a b =
theorem codisjoint_assoc {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Codisjoint (a b) c Codisjoint a (b c)
theorem codisjoint_left_comm {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Codisjoint a (b c) Codisjoint b (a c)
theorem codisjoint_right_comm {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
Codisjoint (a b) c Codisjoint (a c) b
theorem Codisjoint.sup_left {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : ) :
Codisjoint (a c) b
theorem Codisjoint.sup_left' {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : ) :
Codisjoint (c a) b
theorem Codisjoint.sup_right {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : ) :
Codisjoint a (b c)
theorem Codisjoint.sup_right' {α : Type u_1} [] [] {a : α} {b : α} (c : α) (h : ) :
Codisjoint a (c b)
theorem Codisjoint.of_codisjoint_sup_of_le {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : Codisjoint (a b) c) (hle : c a) :
theorem Codisjoint.of_codisjoint_sup_of_le' {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : Codisjoint (a b) c) (hle : c b) :
@[simp]
theorem codisjoint_inf_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
@[simp]
theorem codisjoint_inf_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} :
theorem Codisjoint.inf_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (ha : ) (hb : ) :
Codisjoint (a b) c
theorem Codisjoint.inf_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} (hb : ) (hc : ) :
Codisjoint a (b c)
theorem Codisjoint.left_le_of_le_inf_right {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : a b c) (hd : ) :
a c
theorem Codisjoint.left_le_of_le_inf_left {α : Type u_1} [] [] {a : α} {b : α} {c : α} (h : b a c) (hd : ) :
a c
theorem Disjoint.dual {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint a bCodisjoint (OrderDual.toDual a) (OrderDual.toDual b)
theorem Codisjoint.dual {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint (OrderDual.toDual a) (OrderDual.toDual b)
@[simp]
theorem disjoint_toDual_iff {α : Type u_1} [] [] {a : α} {b : α} :
Disjoint (OrderDual.toDual a) (OrderDual.toDual b)
@[simp]
theorem disjoint_ofDual_iff {α : Type u_1} [] [] {a : αᵒᵈ} {b : αᵒᵈ} :
Disjoint (OrderDual.ofDual a) (OrderDual.ofDual b)
@[simp]
theorem codisjoint_toDual_iff {α : Type u_1} [] [] {a : α} {b : α} :
Codisjoint (OrderDual.toDual a) (OrderDual.toDual b) Disjoint a b
@[simp]
theorem codisjoint_ofDual_iff {α : Type u_1} [] [] {a : αᵒᵈ} {b : αᵒᵈ} :
Codisjoint (OrderDual.ofDual a) (OrderDual.ofDual b) Disjoint a b
theorem Disjoint.le_of_codisjoint {α : Type u_1} [] [] {a : α} {b : α} {c : α} (hab : Disjoint a b) (hbc : ) :
a c
structure IsCompl {α : Type u_1} [] [] (x : α) (y : α) :

Two elements x and y are complements of each other if x ⊔ y = ⊤ and x ⊓ y = ⊥.

• disjoint : Disjoint x y

If x and y are to be complementary in an order, they should be disjoint.

• codisjoint :

If x and y are to be complementary in an order, they should be codisjoint.

Instances For
theorem IsCompl.disjoint {α : Type u_1} [] [] {x : α} {y : α} (self : IsCompl x y) :

If x and y are to be complementary in an order, they should be disjoint.

theorem IsCompl.codisjoint {α : Type u_1} [] [] {x : α} {y : α} (self : IsCompl x y) :

If x and y are to be complementary in an order, they should be codisjoint.

theorem isCompl_iff {α : Type u_1} [] [] {a : α} {b : α} :
theorem IsCompl.symm {α : Type u_1} [] [] {x : α} {y : α} (h : IsCompl x y) :
theorem isCompl_comm {α : Type u_1} [] [] {x : α} {y : α} :
theorem IsCompl.dual {α : Type u_1} [] [] {x : α} {y : α} (h : IsCompl x y) :
IsCompl (OrderDual.toDual x) (OrderDual.toDual y)
theorem IsCompl.ofDual {α : Type u_1} [] [] {a : αᵒᵈ} {b : αᵒᵈ} (h : IsCompl a b) :
IsCompl (OrderDual.ofDual a) (OrderDual.ofDual b)
theorem IsCompl.of_le {α : Type u_1} [] [] {x : α} {y : α} (h₁ : x y ) (h₂ : x y) :
theorem IsCompl.of_eq {α : Type u_1} [] [] {x : α} {y : α} (h₁ : x y = ) (h₂ : x y = ) :
theorem IsCompl.inf_eq_bot {α : Type u_1} [] [] {x : α} {y : α} (h : IsCompl x y) :
x y =
theorem IsCompl.sup_eq_top {α : Type u_1} [] [] {x : α} {y : α} (h : IsCompl x y) :
x y =
theorem IsCompl.inf_left_le_of_le_sup_right {α : Type u_1} [] [] {a : α} {b : α} {x : α} {y : α} (h : IsCompl x y) (hle : a b y) :
a x b
theorem IsCompl.le_sup_right_iff_inf_left_le {α : Type u_1} [] [] {x : α} {y : α} {a : α} {b : α} (h : IsCompl x y) :
a b y a x b
theorem IsCompl.inf_left_eq_bot_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl y z) :
x y = x z
theorem IsCompl.inf_right_eq_bot_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl y z) :
x z = x y
theorem IsCompl.disjoint_left_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl y z) :
Disjoint x y x z
theorem IsCompl.disjoint_right_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl y z) :
Disjoint x z x y
theorem IsCompl.le_left_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl x y) :
z x Disjoint z y
theorem IsCompl.le_right_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl x y) :
z y Disjoint z x
theorem IsCompl.left_le_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl x y) :
x z
theorem IsCompl.right_le_iff {α : Type u_1} [] [] {x : α} {y : α} {z : α} (h : IsCompl x y) :
y z
theorem IsCompl.Antitone {α : Type u_1} [] [] {x : α} {y : α} {x' : α} {y' : α} (h : IsCompl x y) (h' : IsCompl x' y') (hx : x x') :
y' y
theorem IsCompl.right_unique {α : Type u_1} [] [] {x : α} {y : α} {z : α} (hxy : IsCompl x y) (hxz : IsCompl x z) :
y = z
theorem IsCompl.left_unique {α : Type u_1} [] [] {x : α} {y : α} {z : α} (hxz : IsCompl x z) (hyz : IsCompl y z) :
x = y
theorem IsCompl.sup_inf {α : Type u_1} [] [] {x : α} {y : α} {x' : α} {y' : α} (h : IsCompl x y) (h' : IsCompl x' y') :
IsCompl (x x') (y y')
theorem IsCompl.inf_sup {α : Type u_1} [] [] {x : α} {y : α} {x' : α} {y' : α} (h : IsCompl x y) (h' : IsCompl x' y') :
IsCompl (x x') (y y')
theorem Prod.disjoint_iff {α : Type u_1} {β : Type u_2} [] [] [] [] {x : α × β} {y : α × β} :
Disjoint x y Disjoint x.1 y.1 Disjoint x.2 y.2
theorem Prod.codisjoint_iff {α : Type u_1} {β : Type u_2} [] [] [] [] {x : α × β} {y : α × β} :
Codisjoint x.1 y.1 Codisjoint x.2 y.2
theorem Prod.isCompl_iff {α : Type u_1} {β : Type u_2} [] [] [] [] {x : α × β} {y : α × β} :
IsCompl x y IsCompl x.1 y.1 IsCompl x.2 y.2
@[simp]
theorem isCompl_toDual_iff {α : Type u_1} [] [] {a : α} {b : α} :
IsCompl (OrderDual.toDual a) (OrderDual.toDual b) IsCompl a b
@[simp]
theorem isCompl_ofDual_iff {α : Type u_1} [] [] {a : αᵒᵈ} {b : αᵒᵈ} :
IsCompl (OrderDual.ofDual a) (OrderDual.ofDual b) IsCompl a b
theorem isCompl_bot_top {α : Type u_1} [] [] :
theorem isCompl_top_bot {α : Type u_1} [] [] :
theorem eq_top_of_isCompl_bot {α : Type u_1} [] [] {x : α} (h : ) :
x =
theorem eq_top_of_bot_isCompl {α : Type u_1} [] [] {x : α} (h : ) :
x =
theorem eq_bot_of_isCompl_top {α : Type u_1} [] [] {x : α} (h : ) :
x =
theorem eq_bot_of_top_isCompl {α : Type u_1} [] [] {x : α} (h : ) :
x =
def IsComplemented {α : Type u_1} [] [] (a : α) :

An element is complemented if it has a complement.

Equations
Instances For
theorem isComplemented_bot {α : Type u_1} [] [] :
theorem isComplemented_top {α : Type u_1} [] [] :
theorem IsComplemented.sup {α : Type u_1} [] [] {a : α} {b : α} :
IsComplemented (a b)
theorem IsComplemented.inf {α : Type u_1} [] [] {a : α} {b : α} :
IsComplemented (a b)
class ComplementedLattice (α : Type u_2) [] [] :

A complemented bounded lattice is one where every element has a (not necessarily unique) complement.

• exists_isCompl : ∀ (a : α), ∃ (b : α), IsCompl a b

In a ComplementedLattice, every element admits a complement.

Instances
theorem ComplementedLattice.exists_isCompl {α : Type u_2} [] [] [self : ] (a : α) :
∃ (b : α), IsCompl a b

In a ComplementedLattice, every element admits a complement.

instance Subsingleton.instComplementedLattice {α : Type u_1} [] [] [] :
Equations
• =
instance ComplementedLattice.instOrderDual {α : Type u_1} [] [] :
Equations
• =
@[reducible, inline]
abbrev Complementeds (α : Type u_2) [] [] :
Type u_2

The sublattice of complemented elements.

Equations
• = { a : α // }
Instances For
instance Complementeds.hasCoeT {α : Type u_1} [] [] :
CoeTC () α
Equations
• Complementeds.hasCoeT = { coe := Subtype.val }
theorem Complementeds.coe_injective {α : Type u_1} [] [] :
Function.Injective Subtype.val
@[simp]
theorem Complementeds.coe_inj {α : Type u_1} [] [] {a : } {b : } :
a = b a = b
theorem Complementeds.coe_le_coe {α : Type u_1} [] [] {a : } {b : } :
a b a b
theorem Complementeds.coe_lt_coe {α : Type u_1} [] [] {a : } {b : } :
a < b a < b
instance Complementeds.instBoundedOrder {α : Type u_1} [] [] :
Equations
• Complementeds.instBoundedOrder =
@[simp]
theorem Complementeds.coe_bot {α : Type u_1} [] [] :
=
@[simp]
theorem Complementeds.coe_top {α : Type u_1} [] [] :
=
theorem Complementeds.mk_bot {α : Type u_1} [] [] :
, =
theorem Complementeds.mk_top {α : Type u_1} [] [] :
, =
instance Complementeds.instInhabited {α : Type u_1} [] [] :
Equations
• Complementeds.instInhabited = { default := }
instance Complementeds.instSup {α : Type u_1} [] [] :
Sup ()
Equations
• Complementeds.instSup = { sup := fun (a b : ) => a b, }
instance Complementeds.instInf {α : Type u_1} [] [] :
Inf ()
Equations
• Complementeds.instInf = { inf := fun (a b : ) => a b, }
@[simp]
theorem Complementeds.coe_sup {α : Type u_1} [] [] (a : ) (b : ) :
(a b) = a b
@[simp]
theorem Complementeds.coe_inf {α : Type u_1} [] [] (a : ) (b : ) :
(a b) = a b
@[simp]
theorem Complementeds.mk_sup_mk {α : Type u_1} [] [] {a : α} {b : α} (ha : ) (hb : ) :
a, ha b, hb = a b,
@[simp]
theorem Complementeds.mk_inf_mk {α : Type u_1} [] [] {a : α} {b : α} (ha : ) (hb : ) :
a, ha b, hb = a b,
instance Complementeds.instDistribLattice {α : Type u_1} [] [] :
Equations
@[simp]
theorem Complementeds.disjoint_coe {α : Type u_1} [] [] {a : } {b : } :
Disjoint a b Disjoint a b
@[simp]
theorem Complementeds.codisjoint_coe {α : Type u_1} [] [] {a : } {b : } :
Codisjoint a b
@[simp]
theorem Complementeds.isCompl_coe {α : Type u_1} [] [] {a : } {b : } :
IsCompl a b IsCompl a b
instance Complementeds.instComplementedLattice {α : Type u_1} [] [] :
Equations
• =