Zulip Chat Archive

Stream: Is there code for X?

Topic: Galois group acts on ideals


Kevin Buzzard (May 27 2024 at 21:52):

In a proof, I need this:

import Mathlib.RingTheory.Ideal.Maps

variable (A : Type*) [CommRing A] (B : Type*) [CommRing B] [Algebra A B]

instance foo : MulDistribMulAction (B ≃ₐ[A] B) (Ideal B) where
  smul σ I := Ideal.comap σ.symm I
  one_smul I := I.comap_id
  smul_one σ := by simp only [Ideal.one_eq_top]; rfl
  mul_smul _ _ _ := rfl
  smul_mul σ I J := by
    refine le_antisymm (fun x  ?_ : Ideal.comap _ _  _) (Ideal.le_comap_mul _)
    obtain y, rfl :  y, σ y = x := σ.symm x, σ.apply_symm_apply x
    rw [Ideal.mem_comap, AlgEquiv.symm_apply_apply,  Ideal.mem_comap]
    revert y
    refine Ideal.mul_le.mpr (fun r hr s hs  ?_)
    simp only [Ideal.mem_comap, map_mul]
    exact Ideal.mul_mem_mul (Ideal.mem_comap.2 (by simp [hr])) (Ideal.mem_comap.2 <| by simp [hs])

Do we have it already? If not, is this instance suitable for mathlib, or should I just make it a local instance?

Eric Wieser (May 27 2024 at 22:04):

This feels like it ought to follow from docs#Submodule.pointwiseDistribMulAction, but the SMulCommClass requirement doesn't work

Adam Topaz (May 27 2024 at 22:10):

This makes me wonder... what's the general abstraction here? If we have some object X with an action of G, and some other object Y "constructed out of X" (whatever that means...), we get an action of G on Y. Is there something general we can do here?

It's possible to do this with category theory ("constructed out of" means "functor"), but I wonder if anyone has any other ideas.

Eric Wieser (May 27 2024 at 22:14):

I think the missing piece is

instance Ideal.pointwiseMulSemiringAction
    [Monoid α] [MulSemiringAction α B] : MulSemiringAction α (Ideal B) where
  smul a I := Ideal.map (MulSemiringAction.toRingHom _ _ a) I
  one_smul I :=
    congr_arg (I.map ·) (RingHom.ext <| one_smul α) |>.trans I.map_id
  mul_smul _a₁ _a₂ I :=
    congr_arg (I.map ·) (RingHom.ext <| mul_smul _ _) |>.trans (I.map_map _ _).symm
  smul_one a := by simp only [Ideal.one_eq_top]; exact Ideal.map_top _
  smul_mul a I J := Ideal.map_mul _ I J
  smul_add a I J := Ideal.map_sup _ I J
  smul_zero a := Ideal.map_bot

edit: #13294

Adam Topaz (May 27 2024 at 22:17):

Yeah that would works in this case, but again that’s special to Ideal.

Eric Wieser (May 27 2024 at 22:18):

I think every time you "construct Y out of X" you have to specify what that means, which is one of the things this instance captures

Adam Topaz (May 27 2024 at 22:24):

I wish we could do better :-/

Eric Wieser (May 27 2024 at 22:26):

I think this treads into "generalizing SubFoo.map and FooHom.comp" territory

Antoine Chambert-Loir (May 28 2024 at 11:48):

There is an analogous stuff for modules / submodules if one compatible actions on the ring and the module. (This is important, eg, to formulate Galois descent.)

Antoine Chambert-Loir (May 28 2024 at 11:49):

The action on ideals is a particular case, when the module is the ring, with the same action.

Eric Wieser (May 28 2024 at 12:10):

I don't think the two actions are the same, since Ideal.map and Submodule.map are different

Kevin Buzzard (May 28 2024 at 12:14):

docs#Ideal.map and docs#Submodule.map to save people from going to random websites.

Eric Wieser (May 28 2024 at 12:33):

I guess this tension exists in general: should actions /images only exist when they coincide with the set action/image, or should they always exist and take the appropriate closure?

Antoine Chambert-Loir (May 28 2024 at 12:59):

(For a surjective morphism of rings, the ideal map coincides with the submodule map )

Eric Wieser (May 28 2024 at 21:46):

Do we have that result in mathlib?

Junyan Xu (May 29 2024 at 08:09):

(deleted)

Junyan Xu (May 29 2024 at 08:09):

@loogle Ideal.map, RingHomSurjective

loogle (May 29 2024 at 08:09):

:search: Ideal.map_eq_submodule_map


Last updated: May 02 2025 at 03:31 UTC