Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 251a42b

Browse files
feat(ring_theory/finiteness): add monoid_algebra.ft_iff_fg (#7445)
We prove here `add monoid_algebra.ft_iff_fg`: the monoid algebra is of finite type if and only if the monoid is finitely generated. - [x] depends on: #7409
1 parent be1af7c commit 251a42b

File tree

2 files changed

+166
-21
lines changed

2 files changed

+166
-21
lines changed

src/algebra/monoid_algebra.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ section span
615615

616616
variables [semiring k] [mul_one_class G]
617617

618+
/-- An element of `monoid_algebra R M` is in the subalgebra generated by its support. -/
618619
lemma mem_span_support (f : monoid_algebra k G) :
619620
f ∈ submodule.span k (of k G '' (f.support : set G)) :=
620621
by rw [of, monoid_hom.coe_mk, ← finsupp.supported_eq_span_single, finsupp.mem_supported]
@@ -888,6 +889,8 @@ rfl
888889

889890
@[simp] lemma of'_apply (a : G) : of' k G a = single a 1 := rfl
890891

892+
lemma of'_eq_of [add_zero_class G] (a : G) : of' k G a = of k G a := rfl
893+
891894
lemma of_injective [nontrivial k] [add_zero_class G] : function.injective (of k G) :=
892895
λ a b h, by simpa using (single_eq_single_iff _ _ _ _).mp h
893896

@@ -933,10 +936,13 @@ section span
933936

934937
variables [semiring k]
935938

939+
/-- An element of `add_monoid_algebra R M` is in the submodule generated by its support. -/
936940
lemma mem_span_support [add_zero_class G] (f : add_monoid_algebra k G) :
937941
f ∈ submodule.span k (of k G '' (f.support : set G)) :=
938942
by rw [of, monoid_hom.coe_mk, ← finsupp.supported_eq_span_single, finsupp.mem_supported]
939943

944+
/-- An element of `add_monoid_algebra R M` is in the subalgebra generated by its support, using
945+
unbundled inclusion. -/
940946
lemma mem_span_support' (f : add_monoid_algebra k G) :
941947
f ∈ submodule.span k (of' k G '' (f.support : set G)) :=
942948
by rw [of', ← finsupp.supported_eq_span_single, finsupp.mem_supported]

src/ring_theory/finiteness.lean

Lines changed: 160 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -565,37 +565,44 @@ end alg_hom
565565

566566
section monoid_algebra
567567

568+
variables {R : Type*} {M : Type*}
569+
568570
namespace add_monoid_algebra
569571

570572
open algebra add_submonoid submodule
571573

572574
section span
573575

574-
variables {R : Type*} {M : Type*} [comm_semiring R] [add_monoid M]
576+
section semiring
577+
578+
variables [comm_semiring R] [add_monoid M]
575579

576-
lemma mem_adjoint_support (f : add_monoid_algebra R M) :
577-
f ∈ adjoin R (of' R M '' (f.support : set M)) :=
580+
/-- An element of `add_monoid_algebra R M` is in the subalgebra generated by its support. -/
581+
lemma mem_adjoin_support (f : add_monoid_algebra R M) : f ∈ adjoin R (of' R M '' f.support) :=
578582
begin
579-
suffices : span R (of R M '' (f.support : set M)) ≤
580-
(adjoin R (of R M '' (f.support : set M))).to_submodule,
583+
suffices : span R (of' R M '' f.support) ≤ (adjoin R (of' R M '' f.support)).to_submodule,
581584
{ exact this (mem_span_support f) },
582585
rw submodule.span_le,
583586
exact subset_adjoin
584587
end
585588

589+
/-- If a set `S` generates, as algebra, `add_monoid_algebra R M`, then the set of supports of
590+
elements of `S` generates `add_monoid_algebra R M`. -/
586591
lemma support_gen_of_gen {S : set (add_monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
587592
algebra.adjoin R (⋃ f ∈ S, (of' R M '' (f.support : set M))) = ⊤ :=
588593
begin
589594
refine le_antisymm le_top _,
590595
rw [← hS, adjoin_le_iff],
591596
intros f hf,
592-
have hincl : of' R M '' (f.support : set M)
593-
⋃ (g : add_monoid_algebra R M) (H : g ∈ S), of' R M '' (g.support : set M),
597+
have hincl : of' R M '' f.support ⊆
598+
⋃ (g : add_monoid_algebra R M) (H : g ∈ S), of' R M '' g.support,
594599
{ intros s hs,
595600
exact set.mem_bUnion_iff.2 ⟨f, ⟨hf, hs⟩⟩ },
596-
exact adjoin_mono hincl (mem_adjoint_support f)
601+
exact adjoin_mono hincl (mem_adjoin_support f)
597602
end
598603

604+
/-- If a set `S` generates, as algebra, `add_monoid_algebra R M`, then the image of the union of
605+
the supports of elements of `S` generates `add_monoid_algebra R M`. -/
599606
lemma support_gen_of_gen' {S : set (add_monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
600607
algebra.adjoin R (of' R M '' (⋃ f ∈ S, (f.support : set M))) = ⊤ :=
601608
begin
@@ -605,10 +612,58 @@ begin
605612
simp only [set.image_Union]
606613
end
607614

615+
end semiring
616+
617+
section ring
618+
619+
variables [comm_ring R] [add_comm_monoid M]
620+
621+
/-- If `add_monoid_algebra R M` is of finite type, there there is a `G : finset M` such that its
622+
image generates, as algera, `add_monoid_algebra R M`. -/
623+
lemma exists_finset_adjoin_eq_top [h : finite_type R (add_monoid_algebra R M)] :
624+
∃ G : finset M, algebra.adjoin R (of' R M '' G) = ⊤ :=
625+
begin
626+
unfreezingI { obtain ⟨S, hS⟩ := h },
627+
letI : decidable_eq M := classical.dec_eq M,
628+
use finset.bUnion S (λ f, f.support),
629+
have : (finset.bUnion S (λ f, f.support) : set M) = ⋃ f ∈ S, (f.support : set M),
630+
{ simp only [finset.set_bUnion_coe, finset.coe_bUnion] },
631+
rw [this],
632+
exact support_gen_of_gen' hS
633+
end
634+
635+
/-- The image of an element `m : M` in `add_monoid_algebra R M` belongs the submodule generated by
636+
`S : set M` if and only if `m ∈ S`. -/
637+
lemma of'_mem_span [nontrivial R] {m : M} {S : set M} :
638+
of' R M m ∈ span R (of' R M '' S) ↔ m ∈ S :=
639+
begin
640+
refine ⟨λ h, _, λ h, submodule.subset_span $ set.mem_image_of_mem (of R M) h⟩,
641+
rw [of', ← finsupp.supported_eq_span_single, finsupp.mem_supported,
642+
finsupp.support_single_ne_zero (@one_ne_zero R _ (by apply_instance))] at h,
643+
simpa using h
644+
end
645+
646+
/--If the image of an element `m : M` in `add_monoid_algebra R M` belongs the submodule generated by
647+
the closure of some `S : set M` then `m ∈ closure S`. -/
648+
lemma mem_closure_of_mem_span_closure [nontrivial R] {m : M} {S : set M}
649+
(h : of' R M m ∈ span R (submonoid.closure (of' R M '' S) : set (add_monoid_algebra R M))) :
650+
m ∈ closure S :=
651+
begin
652+
suffices : multiplicative.of_add m ∈ submonoid.closure (multiplicative.to_add ⁻¹' S),
653+
{ simpa [← to_submonoid_closure] },
654+
rw [set.image_congr' (show ∀ x, of' R M x = of R M x, from λ x, of'_eq_of x),
655+
← monoid_hom.map_mclosure] at h,
656+
simpa using of'_mem_span.1 h
657+
end
658+
659+
end ring
660+
608661
end span
609662

610-
variables {R : Type*} {M : Type*} [add_comm_monoid M]
663+
variables [add_comm_monoid M]
611664

665+
/-- If a set `S` generates an additive monoid `M`, then the image of `M` generates, as algebra,
666+
`add_monoid_algebra R M`. -/
612667
lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
613668
(hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
614669
(λ (s : S), of' R M ↑s) : mv_polynomial S R → add_monoid_algebra R M) :=
@@ -627,13 +682,35 @@ begin
627682
exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
628683
end
629684

630-
instance ft_of_fg [comm_ring R] [h : add_monoid.fg M] : finite_type R (add_monoid_algebra R M) :=
685+
/-- If an additive monoid `M` is finitely generated then `add_monoid_algebra R M` is of finite
686+
type. -/
687+
instance finite_type_of_fg [comm_ring R] [h : add_monoid.fg M] :
688+
finite_type R (add_monoid_algebra R M) :=
631689
begin
632690
obtain ⟨S, hS⟩ := h.out,
633691
exact (finite_type.mv_polynomial R (S : set M)).of_surjective (mv_polynomial.aeval
634692
(λ (s : (S : set M)), of' R M ↑s)) (mv_polynomial_aeval_of_surjective_of_closure hS)
635693
end
636694

695+
/-- An additive monoid `M` is finitely generated if and only if `add_monoid_algebra R M` is of
696+
finite type. -/
697+
lemma finite_type_iff_fg [comm_ring R] [nontrivial R] :
698+
add_monoid.fg M ↔ finite_type R (add_monoid_algebra R M) :=
699+
begin
700+
refine ⟨λ h, @add_monoid_algebra.finite_type_of_fg _ _ _ _ h, λ h, _⟩,
701+
obtain ⟨S, hS⟩ := @exists_finset_adjoin_eq_top R M _ _ h,
702+
refine add_monoid.fg_def.2 ⟨S, (eq_top_iff' _).2 (λ m, _)⟩,
703+
have hm : of' R M m ∈ (adjoin R (of' R M '' ↑S)).to_submodule,
704+
{ simp only [hS, top_to_submodule, submodule.mem_top], },
705+
rw [adjoin_eq_span] at hm,
706+
exact mem_closure_of_mem_span_closure hm
707+
end
708+
709+
/-- If `add_monoid_algebra R M` is of finite type then `M` is finitely generated. -/
710+
lemma fg_of_finite_type [comm_ring R] [nontrivial R] [h : finite_type R (add_monoid_algebra R M)] :
711+
add_monoid.fg M :=
712+
finite_type_iff_fg.2 h
713+
637714
end add_monoid_algebra
638715

639716
namespace monoid_algebra
@@ -642,31 +719,36 @@ open algebra submonoid submodule
642719

643720
section span
644721

645-
variables {R : Type*} {M : Type*} [comm_semiring R] [monoid M]
722+
section semiring
723+
724+
variables [comm_semiring R] [monoid M]
646725

647-
lemma mem_adjoint_support (f : monoid_algebra R M) :
648-
f ∈ adjoin R (monoid_algebra.of R M '' (f.support : set M)) :=
726+
/-- An element of `monoid_algebra R M` is in the subalgebra generated by its support. -/
727+
lemma mem_adjoint_support (f : monoid_algebra R M) : f ∈ adjoin R (of R M '' f.support) :=
649728
begin
650-
suffices : span R (of R M '' (f.support : set M)) ≤
651-
(adjoin R (of R M '' (f.support : set M))).to_submodule,
729+
suffices : span R (of R M '' f.support) ≤ (adjoin R (of R M '' f.support)).to_submodule,
652730
{ exact this (mem_span_support f) },
653731
rw submodule.span_le,
654732
exact subset_adjoin
655733
end
656734

735+
/-- If a set `S` generates, as algebra, `monoid_algebra R M`, then the set of supports of elements
736+
of `S` generates `monoid_algebra R M`. -/
657737
lemma support_gen_of_gen {S : set (monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
658-
algebra.adjoin R (⋃ f ∈ S, ((of R M) '' (f.support : set M))) = ⊤ :=
738+
algebra.adjoin R (⋃ f ∈ S, (of R M '' (f.support : set M))) = ⊤ :=
659739
begin
660740
refine le_antisymm le_top _,
661741
rw [← hS, adjoin_le_iff],
662742
intros f hf,
663-
have hincl : (of R M) '' (f.support : set M)
664-
⋃ (g : monoid_algebra R M) (H : g ∈ S), of R M '' (g.support : set M),
743+
have hincl : (of R M) '' f.support ⊆
744+
⋃ (g : monoid_algebra R M) (H : g ∈ S), of R M '' g.support,
665745
{ intros s hs,
666746
exact set.mem_bUnion_iff.2 ⟨f, ⟨hf, hs⟩⟩ },
667747
exact adjoin_mono hincl (mem_adjoint_support f)
668748
end
669749

750+
/-- If a set `S` generates, as algebra, `monoid_algebra R M`, then the image of the union of the
751+
supports of elements of `S` generates `monoid_algebra R M`. -/
670752
lemma support_gen_of_gen' {S : set (monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
671753
algebra.adjoin R (of R M '' (⋃ f ∈ S, (f.support : set M))) = ⊤ :=
672754
begin
@@ -676,10 +758,55 @@ begin
676758
simp only [set.image_Union]
677759
end
678760

761+
end semiring
762+
763+
section ring
764+
765+
variables [comm_ring R] [comm_monoid M]
766+
767+
/-- If `monoid_algebra R M` is of finite type, there there is a `G : finset M` such that its image
768+
generates, as algera, `monoid_algebra R M`. -/
769+
lemma exists_finset_adjoin_eq_top [h :finite_type R (monoid_algebra R M)] :
770+
∃ G : finset M, algebra.adjoin R (of R M '' G) = ⊤ :=
771+
begin
772+
unfreezingI { obtain ⟨S, hS⟩ := h },
773+
letI : decidable_eq M := classical.dec_eq M,
774+
use finset.bUnion S (λ f, f.support),
775+
have : (finset.bUnion S (λ f, f.support) : set M) = ⋃ f ∈ S, (f.support : set M),
776+
{ simp only [finset.set_bUnion_coe, finset.coe_bUnion] },
777+
rw [this],
778+
exact support_gen_of_gen' hS
779+
end
780+
781+
/-- The image of an element `m : M` in `monoid_algebra R M` belongs the submodule generated by
782+
`S : set M` if and only if `m ∈ S`. -/
783+
lemma of_mem_span_of_iff [nontrivial R] {m : M} {S : set M} :
784+
of R M m ∈ span R (of R M '' S) ↔ m ∈ S :=
785+
begin
786+
refine ⟨λ h, _, λ h, submodule.subset_span $ set.mem_image_of_mem (of R M) h⟩,
787+
rw [of, monoid_hom.coe_mk, ← finsupp.supported_eq_span_single, finsupp.mem_supported,
788+
finsupp.support_single_ne_zero (@one_ne_zero R _ (by apply_instance))] at h,
789+
simpa using h
790+
end
791+
792+
/--If the image of an element `m : M` in `monoid_algebra R M` belongs the submodule generated by the
793+
closure of some `S : set M` then `m ∈ closure S`. -/
794+
lemma mem_closure_of_mem_span_closure [nontrivial R] {m : M} {S : set M}
795+
(h : of R M m ∈ span R (submonoid.closure (of R M '' S) : set (monoid_algebra R M))) :
796+
m ∈ closure S :=
797+
begin
798+
rw ← monoid_hom.map_mclosure at h,
799+
simpa using of_mem_span_of_iff.1 h
800+
end
801+
802+
end ring
803+
679804
end span
680805

681-
variables {R : Type*} {M : Type*} [comm_monoid M]
806+
variables [comm_monoid M]
682807

808+
/-- If a set `S` generates a monoid `M`, then the image of `M` generates, as algebra,
809+
`monoid_algebra R M`. -/
683810
lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
684811
(hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
685812
(λ (s : S), of R M ↑s) : mv_polynomial S R → monoid_algebra R M) :=
@@ -698,8 +825,20 @@ begin
698825
exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
699826
end
700827

701-
instance ft_of_fg [comm_ring R] [monoid.fg M] : finite_type R (monoid_algebra R M) :=
702-
add_monoid_algebra.ft_of_fg.equiv (to_additive_alg_equiv R M).symm
828+
/-- If a monoid `M` is finitely generated then `monoid_algebra R M` is of finite type. -/
829+
instance finite_type_of_fg [comm_ring R] [monoid.fg M] : finite_type R (monoid_algebra R M) :=
830+
add_monoid_algebra.finite_type_of_fg.equiv (to_additive_alg_equiv R M).symm
831+
832+
/-- A monoid `M` is finitely generated if and only if `monoid_algebra R M` is of finite type. -/
833+
lemma finite_type_iff_fg [comm_ring R] [nontrivial R] :
834+
monoid.fg M ↔ finite_type R (monoid_algebra R M) :=
835+
⟨λ h, @monoid_algebra.finite_type_of_fg _ _ _ _ h, λ h, monoid.fg_iff_add_fg.2 $
836+
add_monoid_algebra.finite_type_iff_fg.2 $ h.equiv $ to_additive_alg_equiv R M⟩
837+
838+
/-- If `monoid_algebra R M` is of finite type then `M` is finitely generated. -/
839+
lemma fg_of_finite_type [comm_ring R] [nontrivial R] [h : finite_type R (monoid_algebra R M)] :
840+
monoid.fg M :=
841+
finite_type_iff_fg.2 h
703842

704843
end monoid_algebra
705844

0 commit comments

Comments
 (0)