Zulip Chat Archive

Stream: general

Topic: Monoid ring in Lean


Daniel Donnelly (Dec 13 2019 at 17:12):

How do you create and work with a Monoid Ring?

Johan Commelin (Dec 13 2019 at 17:34):

You need to use finsupp

Johan Commelin (Dec 13 2019 at 17:35):

@Daniel Donnelly The best thing is probably to look for instance : semiring in data/finsupp.lean

Johan Commelin (Dec 13 2019 at 18:49):

https://github.com/leanprover-community/mathlib/blob/master/src/data/finsupp.lean#L1196

Johan Commelin (Dec 13 2019 at 18:49):

It wants an additive monoid though

Johan Commelin (Dec 13 2019 at 18:50):

If in your context the monoid is multiplicative, you can switch to additive notation by using (additive M)

Daniel Donnelly (Dec 13 2019 at 20:26):

@Johan Commelin can you give me an example useage?

Kevin Buzzard (Dec 13 2019 at 20:33):

import data.real.basic data.finsupp

def monoid_ring (M : Type*) [monoid M] := (additive M)  

noncomputable example (M : Type*) [monoid M] : ring (monoid_ring M) := by unfold monoid_ring; apply_instance

Kevin Buzzard (Dec 13 2019 at 20:40):

import data.finsupp

def monoid_ring (M : Type*) [monoid M] := (additive M)  

noncomputable theory

instance {M : Type*} [monoid M] : ring (monoid_ring M) := by unfold monoid_ring; apply_instance

variables {M : Type*} [monoid M]

def of_monoid (a : M) : monoid_ring M := finsupp.single a 1

example (a b : M) : of_monoid a * of_monoid b = of_monoid (a * b) :=
begin
  apply finsupp.single_mul_single,
end

Kevin Buzzard (Dec 13 2019 at 20:50):

Maybe bundled is better:

import data.finsupp

def monoid_ring (M : Type*) [monoid M] := (additive M)  

noncomputable theory

instance {M : Type*} [monoid M] : ring (monoid_ring M) := by unfold monoid_ring; apply_instance

variables {M : Type*} [monoid M]

def monoid_ring.of_monoid (M : Type*) [monoid M] : monoid_hom M (monoid_ring M) :=
{ to_fun := λ m, finsupp.single m 1,
  map_one' := rfl,
  map_mul' := λ x y, (@finsupp.single_mul_single (additive M) _ _ _ x y 1 1).symm }

Johan Commelin (Dec 14 2019 at 05:25):

@Daniel Donnelly See Kevin's examples. If you want more, you should provide more context of the things you want to do...

Daniel Donnelly (Dec 16 2019 at 20:16):

@Kevin Buzzard what is that "o" next to the "\to" arrow?

Patrick Massot (Dec 16 2019 at 20:17):

Finitely supported map

Patrick Massot (Dec 16 2019 at 20:18):

You can copy-paste Kevin's code and use "Go to definition" (F12 in VScode)


Last updated: Dec 20 2023 at 11:08 UTC