Zulip Chat Archive

Stream: Is there code for X?

Topic: group acting on algebra


Johan Commelin (Aug 31 2021 at 11:59):

How do I say that a group G acts on a K-algebra L via algebra automorphisms?

I have

import field_theory.galois

variables {K L G : Type*} [field K] [field L] [algebra K L] [group G] [distrib_mul_action G L]

but distrib_mul_action is certainly not strong enough for what I want. Do we have a class that does what I want?

Eric Wieser (Aug 31 2021 at 12:02):

Do you mean that each G is associated with a L ≃ₐ[K] L?

Eric Wieser (Aug 31 2021 at 12:03):

I think mul_semiring_action is close

Eric Wieser (Aug 31 2021 at 12:03):

Where docs#mul_semiring_action.to_semiring_equiv is the associated L ≃+* L

Eric Wieser (Aug 31 2021 at 12:04):

I guess to show it's an alg_equiv, you also need smul_comm_class K G L

Eric Wieser (Aug 31 2021 at 12:04):

So final answer,

variables {K L G : Type*} [field K] [field L] [algebra K L] [group G] [mul_semiring_action G L] [smul_comm_class K G L]

Eric Wieser (Aug 31 2021 at 12:10):

With these defs:

def mul_semiring_action.to_alg_hom
  (M R A : Type*) [monoid M] [comm_semiring R] [semiring A] [algebra R A] [mul_semiring_action M A]
  [smul_comm_class M R A] (x : M) :
  A →ₐ[R] A :=
{ commutes' := λ r, begin
    rw algebra.algebra_map_eq_smul_one r,
    refine (smul_comm _ _ _).trans _,
    rw smul_one,
  end,
  .. mul_semiring_action.to_ring_hom _ _ x}

def mul_semiring_action.to_alg_equiv
  (G R A : Type*) [group G] [comm_semiring R] [semiring A] [algebra R A] [mul_semiring_action G A]
  [smul_comm_class G R A] (x : G) :
  A ≃ₐ[R] A :=
{ .. mul_semiring_action.to_semiring_equiv _ _ x,
  .. mul_semiring_action.to_alg_hom _ _ _ x}

Eric Wieser (Aug 31 2021 at 12:11):

We should probably have distrib_mul_action.to_linear_map and distrib_mul_action.to_linear_equiv too (which I did in this thread)

Johan Commelin (Aug 31 2021 at 12:11):

@Eric Wieser awesome! and I can also make the action faithful, since a couple of days, right?

Johan Commelin (Aug 31 2021 at 12:13):

btw, I think the to_alg_equiv should be a monoid hom, or would that get another name?

Eric Wieser (Aug 31 2021 at 12:13):

It's a bit of a mess

Eric Wieser (Aug 31 2021 at 12:14):

We have docs#mul_action.to_perm and docs#mul_action.to_perm_hom

Eric Wieser (Aug 31 2021 at 12:14):

So in principle we should have mul_semiring_action.to_alg_hom and mul_semiring_action.to_alg_hom_hom

Eric Wieser (Aug 31 2021 at 12:14):

Alternatively, we should maybe eliminate the non-hom versions

Eric Wieser (Aug 31 2021 at 12:15):

We also have two spellings for docs#distrib_mul_action.to_add_monoid_hom, docs#const_smul_hom, which appear in entirely different files

Eric Wieser (Aug 31 2021 at 12:16):

The mess is further complicated by the fact that some auto-/endo- morphisms don't have instances for their monoid structures.

Eric Wieser (Aug 31 2021 at 12:17):

This would be a great cleanup project for someone looking to contribute!

Eric Wieser (Aug 31 2021 at 12:31):

I'll PR the above two defs, but leave the _hom variants to someone else

Johan Commelin (Aug 31 2021 at 12:41):

Thanks!

Eric Wieser (Aug 31 2021 at 12:42):

#8936

Johan Commelin (Aug 31 2021 at 18:45):

@Eric Wieser Are there any conventions on whether to use [smul_comm_class M R A] or [smul_comm_class R M A]?

Eric Wieser (Aug 31 2021 at 19:31):

Not yet. At any rate, if one instance is present the other one should always be too

Eric Wieser (Aug 31 2021 at 19:40):

Usually it ends up being the one that results in smul_comm rather than ←smul_comm being used in the proof. I guess the other rule is that you should never assume both typeclasses as that just slows down typeclass search for no good reason.


Last updated: Dec 20 2023 at 11:08 UTC