Zulip Chat Archive

Stream: Is there code for X?

Topic: adjoin_eq_Inf


Andrew Yang (Dec 07 2021 at 19:08):

Do we have this somewhere?

import ring_theory.adjoin.basic

lemma adjoin_eq_Inf {R S : Type*} [comm_semiring R] [semiring S] [algebra R S] (s : set S) :
  algebra.adjoin R s = Inf {p | s  p} :=
le_antisymm (le_Inf (λ _ h, algebra.adjoin_le h)) (Inf_le algebra.subset_adjoin)

Adam Topaz (Dec 07 2021 at 19:29):

Isn't this the definition of adjoin?

Andrew Yang (Dec 07 2021 at 19:31):

Its not. At least rfl does not work here. Its definition is

/-- The minimal subalgebra that includes `s`. -/
def adjoin (s : set A) : subalgebra R A :=
{ algebra_map_mem' := λ r, subsemiring.subset_closure $ or.inl r, rfl⟩,
  .. subsemiring.closure (set.range (algebra_map R A)  s) }

Adam Topaz (Dec 07 2021 at 19:36):

I see... I guess we don't have that then.

I was under the impression that there should be an adjoin whenever there is a Galois insertion to set, and that it should always be defined as such an Inf, but in this case someone decided the definition should be in terms of subsemirings instead of subalgebras for some reason.

Adam Topaz (Dec 07 2021 at 19:49):

/-- The minimal subalgebra that includes s. -/ :expressionless:

Eric Wieser (Dec 07 2021 at 20:52):

We could use docs#subalgebra.copy in the implementation to make the lemma above rfl

Eric Wieser (Dec 07 2021 at 20:53):

Although I guess we could also just directly switch definition

Anne Baanen (Dec 08 2021 at 10:06):

I think docs#closure_operator or docs#lower_adjoint would help here.

Anne Baanen (Dec 08 2021 at 10:09):

That is, if we define adjoin to have type lower_adjoint (coe : subalgebra R A → set A), then we can derive this lemma from the Galois connection, right?

Yaël Dillies (Dec 08 2021 at 11:18):

Note that I'm not super happy with my current design of lower_adjoint, so feel free to suggest any change!

Eric Wieser (Dec 08 2021 at 11:54):

Do we have the associated galois_connection lemma already?

import ring_theory.adjoin.basic

-- do these exist somewhere with another name?
lemma is_least.Inf_eq {α : Type*} [complete_lattice α] {s : set α} {a : α} :
  is_least s a  Inf s = a
| ha, hal := le_antisymm (Inf_le ha) (le_Inf hal)

lemma is_greatest.Sup_eq {α : Type*} [complete_lattice α] {s : set α} {a : α} :
  is_greatest s a  Sup s = a :=
λ h, h.dual.Inf_eq

-- do we need these if the above exists?
lemma galois_connection.Inf_le_u_eq_l {α β : Type*} [preorder α] [complete_lattice β]
  {l : α  β} {u : β  α} (gc : galois_connection l u) (a : α) :
  Inf {b | a  u b} = l a :=
gc.is_least_l.Inf_eq

lemma galois_connection.Sup_l_le_eq_u {α β : Type*} [complete_lattice α] [preorder β]
  {l : α  β} {u : β  α} (gc : galois_connection l u) (b : β) :
  Sup {a | l a  b} = u b :=
gc.dual.Inf_le_u_eq_l _

-- the lemma in this thread
lemma adjoin_eq_Inf {R S : Type*} [comm_semiring R] [semiring S] [algebra R S] (s : set S) :
  algebra.adjoin R s = Inf {p | s  p} :=
((@algebra.gc R S _ _ _).Inf_le_u_eq_l s).symm

Kevin Buzzard (Dec 08 2021 at 12:06):

Oh nice!

Eric Wieser (Dec 08 2021 at 12:15):

Found a nicer proof using a missing is_least.Inf_eq

Eric Wieser (Dec 08 2021 at 12:20):

Ah, we have all the lemmas after all!

lemma adjoin_eq_Inf {R S : Type*} [comm_semiring R] [semiring S] [algebra R S] (s : set S) :
  algebra.adjoin R s = Inf {p | s  p} :=
(@algebra.gc R S _ _ _).is_glb_l.Inf_eq.symm

Last updated: Dec 20 2023 at 11:08 UTC