File: Mathlib/Order/ModularLattice.lean

full_name: IsWeakUpperModularLattice.covBy_sup_of_inf_covBy_covBy
code: /-- A weakly upper modular lattice is a lattice where `a ⊔ b` covers `a` and `b` if `a` and `b` both
cover `a ⊓ b`. -/
class IsWeakUpperModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a ⊔ b` covers `a` and `b` if `a` and `b` both cover `a ⊓ b`. -/
  covBy_sup_of_inf_covBy_covBy {a b : α} : a ⊓ b ⋖ a → a ⊓ b ⋖ b → a ⋖ a ⊔ b
goal: a ⊓ b ⋖ a → a ⊓ b ⋖ b → a ⋖ a ⊔ b

full_name: IsWeakUpperModularLattice
code: /-- A weakly upper modular lattice is a lattice where `a ⊔ b` covers `a` and `b` if `a` and `b` both
cover `a ⊓ b`. -/
class IsWeakUpperModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a ⊔ b` covers `a` and `b` if `a` and `b` both cover `a ⊓ b`. -/
  covBy_sup_of_inf_covBy_covBy {a b : α} : a ⊓ b ⋖ a → a ⊓ b ⋖ b → a ⋖ a ⊔ b
goal: Prop

full_name: IsWeakLowerModularLattice.inf_covBy_of_covBy_covBy_sup
code: /-- A weakly lower modular lattice is a lattice where `a` and `b` cover `a ⊓ b` if `a ⊔ b` covers
both `a` and `b`. -/
class IsWeakLowerModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a` and `b` cover `a ⊓ b` if `a ⊔ b` covers both `a` and `b` -/
  inf_covBy_of_covBy_covBy_sup {a b : α} : a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ a
goal: a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ a

full_name: IsWeakLowerModularLattice
code: /-- A weakly lower modular lattice is a lattice where `a` and `b` cover `a ⊓ b` if `a ⊔ b` covers
both `a` and `b`. -/
class IsWeakLowerModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a` and `b` cover `a ⊓ b` if `a ⊔ b` covers both `a` and `b` -/
  inf_covBy_of_covBy_covBy_sup {a b : α} : a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ a
goal: Prop

full_name: IsUpperModularLattice.covBy_sup_of_inf_covBy
code: /-- An upper modular lattice, aka semimodular lattice, is a lattice where `a ⊔ b` covers `a` and `b`
if either `a` or `b` covers `a ⊓ b`. -/
class IsUpperModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a ⊔ b` covers `a` and `b` if either `a` or `b` covers `a ⊓ b` -/
  covBy_sup_of_inf_covBy {a b : α} : a ⊓ b ⋖ a → b ⋖ a ⊔ b
goal: a ⊓ b ⋖ a → b ⋖ a ⊔ b

full_name: IsUpperModularLattice
code: /-- An upper modular lattice, aka semimodular lattice, is a lattice where `a ⊔ b` covers `a` and `b`
if either `a` or `b` covers `a ⊓ b`. -/
class IsUpperModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a ⊔ b` covers `a` and `b` if either `a` or `b` covers `a ⊓ b` -/
  covBy_sup_of_inf_covBy {a b : α} : a ⊓ b ⋖ a → b ⋖ a ⊔ b
goal: Prop

full_name: IsLowerModularLattice.inf_covBy_of_covBy_sup
code: /-- A lower modular lattice is a lattice where `a` and `b` both cover `a ⊓ b` if `a ⊔ b` covers
either `a` or `b`. -/
class IsLowerModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a` and `b` both cover `a ⊓ b` if `a ⊔ b` covers either `a` or `b` -/
  inf_covBy_of_covBy_sup {a b : α} : a ⋖ a ⊔ b → a ⊓ b ⋖ b
goal: a ⋖ a ⊔ b → a ⊓ b ⋖ b

full_name: IsLowerModularLattice
code: /-- A lower modular lattice is a lattice where `a` and `b` both cover `a ⊓ b` if `a ⊔ b` covers
either `a` or `b`. -/
class IsLowerModularLattice (α : Type*) [Lattice α] : Prop where
/-- `a` and `b` both cover `a ⊓ b` if `a ⊔ b` covers either `a` or `b` -/
  inf_covBy_of_covBy_sup {a b : α} : a ⋖ a ⊔ b → a ⊓ b ⋖ b
goal: Prop

full_name: IsModularLattice
code: /-- A modular lattice is one with a limited associativity between `⊓` and `⊔`. -/
class IsModularLattice (α : Type*) [Lattice α] : Prop where
/-- Whenever `x ≤ z`, then for any `y`, `(x ⊔ y) ⊓ z ≤ x ⊔ (y ⊓ z)`  -/
  sup_inf_le_assoc_of_le : ∀ {x : α} (y : α) {z : α}, x ≤ z → (x ⊔ y) ⊓ z ≤ x ⊔ y ⊓ z
goal: Prop

full_name: IsModularLattice.sup_inf_le_assoc_of_le
code: /-- A modular lattice is one with a limited associativity between `⊓` and `⊔`. -/
class IsModularLattice (α : Type*) [Lattice α] : Prop where
/-- Whenever `x ≤ z`, then for any `y`, `(x ⊔ y) ⊓ z ≤ x ⊔ (y ⊓ z)`  -/
  sup_inf_le_assoc_of_le : ∀ {x : α} (y : α) {z : α}, x ≤ z → (x ⊔ y) ⊓ z ≤ x ⊔ y ⊓ z
goal: x ≤ z → (x ⊔ y) ⊓ z ≤ x ⊔ y ⊓ z

full_name: covBy_sup_of_inf_covBy_of_inf_covBy_left
code: theorem covBy_sup_of_inf_covBy_of_inf_covBy_left : a ⊓ b ⋖ a → a ⊓ b ⋖ b → a ⋖ a ⊔ b 
goal: a ⊓ b ⋖ a → a ⊓ b ⋖ b → a ⋖ a ⊔ b

full_name: covBy_sup_of_inf_covBy_of_inf_covBy_right
code: theorem covBy_sup_of_inf_covBy_of_inf_covBy_right : a ⊓ b ⋖ a → a ⊓ b ⋖ b → b ⋖ a ⊔ b 
goal: a ⊓ b ⋖ a → a ⊓ b ⋖ b → b ⋖ a ⊔ b

full_name: instIsWeakLowerModularLatticeOrderDual
code: instance : IsWeakLowerModularLattice (OrderDual α) 
goal: IsWeakLowerModularLattice αᵒᵈ

full_name: inf_covBy_of_covBy_sup_of_covBy_sup_left
code: theorem inf_covBy_of_covBy_sup_of_covBy_sup_left : a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ a 
goal: a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ a

full_name: inf_covBy_of_covBy_sup_of_covBy_sup_right
code: theorem inf_covBy_of_covBy_sup_of_covBy_sup_right : a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ b 
goal: a ⋖ a ⊔ b → b ⋖ a ⊔ b → a ⊓ b ⋖ b

full_name: instIsWeakUpperModularLatticeOrderDual
code: instance : IsWeakUpperModularLattice (OrderDual α) 
goal: IsWeakUpperModularLattice αᵒᵈ

full_name: covBy_sup_of_inf_covBy_left
code: theorem covBy_sup_of_inf_covBy_left : a ⊓ b ⋖ a → b ⋖ a ⊔ b 
goal: a ⊓ b ⋖ a → b ⋖ a ⊔ b

full_name: covBy_sup_of_inf_covBy_right
code: theorem covBy_sup_of_inf_covBy_right : a ⊓ b ⋖ b → a ⋖ a ⊔ b 
goal: a ⊓ b ⋖ b → a ⋖ a ⊔ b

full_name: IsUpperModularLattice.to_isWeakUpperModularLattice
code: instance (priority := 100) IsUpperModularLattice.to_isWeakUpperModularLattice :
    IsWeakUpperModularLattice α 
goal: IsWeakUpperModularLattice α

full_name: instIsLowerModularLatticeOrderDual
code: instance : IsLowerModularLattice (OrderDual α) 
goal: IsLowerModularLattice αᵒᵈ

full_name: inf_covBy_of_covBy_sup_left
code: theorem inf_covBy_of_covBy_sup_left : a ⋖ a ⊔ b → a ⊓ b ⋖ b 
goal: a ⋖ a ⊔ b → a ⊓ b ⋖ b

full_name: inf_covBy_of_covBy_sup_right
code: theorem inf_covBy_of_covBy_sup_right : b ⋖ a ⊔ b → a ⊓ b ⋖ a 
goal: b ⋖ a ⊔ b → a ⊓ b ⋖ a

full_name: IsLowerModularLattice.to_isWeakLowerModularLattice
code: instance (priority := 100) IsLowerModularLattice.to_isWeakLowerModularLattice :
    IsWeakLowerModularLattice α 
goal: IsWeakLowerModularLattice α

full_name: instIsUpperModularLatticeOrderDual
code: instance : IsUpperModularLattice (OrderDual α) 
goal: IsUpperModularLattice αᵒᵈ

full_name: sup_inf_assoc_of_le
code: theorem sup_inf_assoc_of_le {x : α} (y : α) {z : α} (h : x ≤ z) : (x ⊔ y) ⊓ z = x ⊔ y ⊓ z 
goal: (x ⊔ y) ⊓ z = x ⊔ y ⊓ z

full_name: IsModularLattice.inf_sup_inf_assoc
code: theorem IsModularLattice.inf_sup_inf_assoc {x y z : α} : x ⊓ z ⊔ y ⊓ z = (x ⊓ z ⊔ y) ⊓ z 
goal: x ⊓ z ⊔ y ⊓ z = (x ⊓ z ⊔ y) ⊓ z

full_name: inf_sup_assoc_of_le
code: theorem inf_sup_assoc_of_le {x : α} (y : α) {z : α} (h : z ≤ x) : x ⊓ y ⊔ z = x ⊓ (y ⊔ z) 
goal: x ⊓ y ⊔ z = x ⊓ (y ⊔ z)

full_name: instIsModularLatticeOrderDual
code: instance : IsModularLattice αᵒᵈ 
goal: IsModularLattice αᵒᵈ

full_name: IsModularLattice.sup_inf_sup_assoc
code: theorem IsModularLattice.sup_inf_sup_assoc : (x ⊔ z) ⊓ (y ⊔ z) = (x ⊔ z) ⊓ y ⊔ z 
goal: (x ⊔ z) ⊓ (y ⊔ z) = (x ⊔ z) ⊓ y ⊔ z

full_name: eq_of_le_of_inf_le_of_le_sup
code: theorem eq_of_le_of_inf_le_of_le_sup (hxy : x ≤ y) (hinf : y ⊓ z ≤ x) (hsup : y ≤ x ⊔ z) :
    x = y 
goal: x = y

full_name: eq_of_le_of_inf_le_of_sup_le
code: theorem eq_of_le_of_inf_le_of_sup_le (hxy : x ≤ y) (hinf : y ⊓ z ≤ x ⊓ z) (hsup : y ⊔ z ≤ x ⊔ z) :
    x = y 
goal: x = y

full_name: sup_lt_sup_of_lt_of_inf_le_inf
code: theorem sup_lt_sup_of_lt_of_inf_le_inf (hxy : x < y) (hinf : y ⊓ z ≤ x ⊓ z) : x ⊔ z < y ⊔ z 
goal: x ⊔ z < y ⊔ z

full_name: inf_lt_inf_of_lt_of_sup_le_sup
code: theorem inf_lt_inf_of_lt_of_sup_le_sup (hxy : x < y) (hinf : y ⊔ z ≤ x ⊔ z) : x ⊓ z < y ⊓ z 
goal: x ⊓ z < y ⊓ z

full_name: wellFounded_lt_exact_sequence
code: /-- A generalization of the theorem that if `N` is a submodule of `M` and
  `N` and `M / N` are both Artinian, then `M` is Artinian. -/
theorem wellFounded_lt_exact_sequence {β γ : Type*} [PartialOrder β] [Preorder γ]
    (h₁ : WellFounded ((· < ·) : β → β → Prop)) (h₂ : WellFounded ((· < ·) : γ → γ → Prop)) (K : α)
    (f₁ : β → α) (f₂ : α → β) (g₁ : γ → α) (g₂ : α → γ) (gci : GaloisCoinsertion f₁ f₂)
    (gi : GaloisInsertion g₂ g₁) (hf : ∀ a, f₁ (f₂ a) = a ⊓ K) (hg : ∀ a, g₁ (g₂ a) = a ⊔ K) :
    WellFounded ((· < ·) : α → α → Prop) 
goal: WellFounded fun x x_1 => x < x_1

full_name: wellFounded_gt_exact_sequence
code: /-- A generalization of the theorem that if `N` is a submodule of `M` and
  `N` and `M / N` are both Noetherian, then `M` is Noetherian.  -/
theorem wellFounded_gt_exact_sequence {β γ : Type*} [Preorder β] [PartialOrder γ]
    (h₁ : WellFounded ((· > ·) : β → β → Prop)) (h₂ : WellFounded ((· > ·) : γ → γ → Prop)) (K : α)
    (f₁ : β → α) (f₂ : α → β) (g₁ : γ → α) (g₂ : α → γ) (gci : GaloisCoinsertion f₁ f₂)
    (gi : GaloisInsertion g₂ g₁) (hf : ∀ a, f₁ (f₂ a) = a ⊓ K) (hg : ∀ a, g₁ (g₂ a) = a ⊔ K) :
    WellFounded ((· > ·) : α → α → Prop) 
goal: WellFounded fun x x_1 => x > x_1

full_name: infIccOrderIsoIccSup
code: /-- The diamond isomorphism between the intervals `[a ⊓ b, a]` and `[b, a ⊔ b]` -/
@[simps]
def infIccOrderIsoIccSup (a b : α) : Set.Icc (a ⊓ b) a ≃o Set.Icc b (a ⊔ b) 
goal: ↑(Set.Icc (a ⊓ b) a) ≃o ↑(Set.Icc b (a ⊔ b))

full_name: infIccOrderIsoIccSup_apply_coe
code: /-- The diamond isomorphism between the intervals `[a ⊓ b, a]` and `[b, a ⊔ b]` -/
@[simps]
def infIccOrderIsoIccSup (a b : α) : Set.Icc (a ⊓ b) a ≃o Set.Icc b (a ⊔ b) 
goal: ↑((infIccOrderIsoIccSup a b) x) = ↑x ⊔ b

full_name: infIccOrderIsoIccSup_symm_apply_coe
code: /-- The diamond isomorphism between the intervals `[a ⊓ b, a]` and `[b, a ⊔ b]` -/
@[simps]
def infIccOrderIsoIccSup (a b : α) : Set.Icc (a ⊓ b) a ≃o Set.Icc b (a ⊔ b) 
goal: ↑((RelIso.symm (infIccOrderIsoIccSup a b)) x) = a ⊓ ↑x

full_name: inf_strictMonoOn_Icc_sup
code: theorem inf_strictMonoOn_Icc_sup {a b : α} : StrictMonoOn (fun c => a ⊓ c) (Icc b (a ⊔ b)) 
goal: StrictMonoOn (fun c => a ⊓ c) (Set.Icc b (a ⊔ b))

full_name: sup_strictMonoOn_Icc_inf
code: theorem sup_strictMonoOn_Icc_inf {a b : α} : StrictMonoOn (fun c => c ⊔ b) (Icc (a ⊓ b) a) 
goal: StrictMonoOn (fun c => c ⊔ b) (Set.Icc (a ⊓ b) a)

full_name: infIooOrderIsoIooSup_apply_coe
code: /-- The diamond isomorphism between the intervals `]a ⊓ b, a[` and `}b, a ⊔ b[`. -/
@[simps]
def infIooOrderIsoIooSup (a b : α) : Ioo (a ⊓ b) a ≃o Ioo b (a ⊔ b) 
goal: ↑((infIooOrderIsoIooSup a b) c) = ↑c ⊔ b

full_name: infIooOrderIsoIooSup_symm_apply_coe
code: /-- The diamond isomorphism between the intervals `]a ⊓ b, a[` and `}b, a ⊔ b[`. -/
@[simps]
def infIooOrderIsoIooSup (a b : α) : Ioo (a ⊓ b) a ≃o Ioo b (a ⊔ b) 
goal: ↑((RelIso.symm (infIooOrderIsoIooSup a b)) c) = a ⊓ ↑c

full_name: infIooOrderIsoIooSup
code: /-- The diamond isomorphism between the intervals `]a ⊓ b, a[` and `}b, a ⊔ b[`. -/
@[simps]
def infIooOrderIsoIooSup (a b : α) : Ioo (a ⊓ b) a ≃o Ioo b (a ⊔ b) 
goal: ↑(Set.Ioo (a ⊓ b) a) ≃o ↑(Set.Ioo b (a ⊔ b))

full_name: IsModularLattice.to_isLowerModularLattice
code: instance (priority := 100) IsModularLattice.to_isLowerModularLattice : IsLowerModularLattice α 
goal: IsLowerModularLattice α

full_name: IsModularLattice.to_isUpperModularLattice
code: instance (priority := 100) IsModularLattice.to_isUpperModularLattice : IsUpperModularLattice α 
goal: IsUpperModularLattice α

full_name: IsCompl.IicOrderIsoIci
code: /-- The diamond isomorphism between the intervals `Set.Iic a` and `Set.Ici b`. -/
def IicOrderIsoIci {a b : α} (h : IsCompl a b) : Set.Iic a ≃o Set.Ici b 
goal: ↑(Set.Iic a) ≃o ↑(Set.Ici b)

full_name: isModularLattice_iff_inf_sup_inf_assoc
code: theorem isModularLattice_iff_inf_sup_inf_assoc [Lattice α] :
    IsModularLattice α ↔ ∀ x y z : α, x ⊓ z ⊔ y ⊓ z = (x ⊓ z ⊔ y) ⊓ z 
goal: IsModularLattice α ↔ ∀ (x y z : α), x ⊓ z ⊔ y ⊓ z = (x ⊓ z ⊔ y) ⊓ z

full_name: DistribLattice.instIsModularLattice
code: instance (priority := 100) [DistribLattice α] : IsModularLattice α 
goal: IsModularLattice α

full_name: Disjoint.disjoint_sup_right_of_disjoint_sup_left
code: theorem disjoint_sup_right_of_disjoint_sup_left [Lattice α] [OrderBot α]
    [IsModularLattice α] (h : Disjoint a b) (hsup : Disjoint (a ⊔ b) c) :
    Disjoint a (b ⊔ c) 
goal: Disjoint a (b ⊔ c)

full_name: Disjoint.disjoint_sup_left_of_disjoint_sup_right
code: theorem disjoint_sup_left_of_disjoint_sup_right [Lattice α] [OrderBot α]
    [IsModularLattice α] (h : Disjoint b c) (hsup : Disjoint a (b ⊔ c)) :
    Disjoint (a ⊔ b) c 
goal: Disjoint (a ⊔ b) c

full_name: Disjoint.isCompl_sup_right_of_isCompl_sup_left
code: theorem isCompl_sup_right_of_isCompl_sup_left [Lattice α] [BoundedOrder α] [IsModularLattice α]
    (h : Disjoint a b) (hcomp : IsCompl (a ⊔ b) c) :
    IsCompl a (b ⊔ c) 
goal: IsCompl a (b ⊔ c)

full_name: Disjoint.isCompl_sup_left_of_isCompl_sup_right
code: theorem isCompl_sup_left_of_isCompl_sup_right [Lattice α] [BoundedOrder α] [IsModularLattice α]
    (h : Disjoint b c) (hcomp : IsCompl a (b ⊔ c)) :
    IsCompl (a ⊔ b) c 
goal: IsCompl (a ⊔ b) c

full_name: Set.Iic.isCompl_inf_inf_of_isCompl_of_le
code: lemma Set.Iic.isCompl_inf_inf_of_isCompl_of_le [Lattice α] [BoundedOrder α] [IsModularLattice α]
    {a b c : α} (h₁ : IsCompl b c) (h₂ : b ≤ a) :
    IsCompl (⟨a ⊓ b, inf_le_left⟩ : Iic a) (⟨a ⊓ c, inf_le_left⟩ : Iic a) 
goal: IsCompl ⟨a ⊓ b, ⋯⟩ ⟨a ⊓ c, ⋯⟩

full_name: IsModularLattice.isModularLattice_Iic
code: instance isModularLattice_Iic : IsModularLattice (Set.Iic a) 
goal: IsModularLattice ↑(Set.Iic a)

full_name: IsModularLattice.isModularLattice_Ici
code: instance isModularLattice_Ici : IsModularLattice (Set.Ici a) 
goal: IsModularLattice ↑(Set.Ici a)

full_name: IsModularLattice.complementedLattice_Iic
code: instance complementedLattice_Iic : ComplementedLattice (Set.Iic a) 
goal: ComplementedLattice ↑(Set.Iic a)

full_name: IsModularLattice.complementedLattice_Ici
code: instance complementedLattice_Ici : ComplementedLattice (Set.Ici a) 
goal: ComplementedLattice ↑(Set.Ici a)