@@ -565,37 +565,44 @@ end alg_hom
565
565
566
566
section monoid_algebra
567
567
568
+ variables {R : Type *} {M : Type *}
569
+
568
570
namespace add_monoid_algebra
569
571
570
572
open algebra add_submonoid submodule
571
573
572
574
section span
573
575
574
- variables {R : Type *} {M : Type *} [comm_semiring R] [add_monoid M]
576
+ section semiring
577
+
578
+ variables [comm_semiring R] [add_monoid M]
575
579
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) :=
578
582
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,
581
584
{ exact this (mem_span_support f) },
582
585
rw submodule.span_le,
583
586
exact subset_adjoin
584
587
end
585
588
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`. -/
586
591
lemma support_gen_of_gen {S : set (add_monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
587
592
algebra.adjoin R (⋃ f ∈ S, (of' R M '' (f.support : set M))) = ⊤ :=
588
593
begin
589
594
refine le_antisymm le_top _,
590
595
rw [← hS, adjoin_le_iff],
591
596
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,
594
599
{ intros s hs,
595
600
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)
597
602
end
598
603
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`. -/
599
606
lemma support_gen_of_gen' {S : set (add_monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
600
607
algebra.adjoin R (of' R M '' (⋃ f ∈ S, (f.support : set M))) = ⊤ :=
601
608
begin
@@ -605,10 +612,58 @@ begin
605
612
simp only [set.image_Union]
606
613
end
607
614
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
+
608
661
end span
609
662
610
- variables {R : Type *} {M : Type *} [add_comm_monoid M]
663
+ variables [add_comm_monoid M]
611
664
665
+ /-- If a set `S` generates an additive monoid `M`, then the image of `M` generates, as algebra,
666
+ `add_monoid_algebra R M`. -/
612
667
lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
613
668
(hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
614
669
(λ (s : S), of' R M ↑s) : mv_polynomial S R → add_monoid_algebra R M) :=
@@ -627,13 +682,35 @@ begin
627
682
exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
628
683
end
629
684
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) :=
631
689
begin
632
690
obtain ⟨S, hS⟩ := h.out,
633
691
exact (finite_type.mv_polynomial R (S : set M)).of_surjective (mv_polynomial.aeval
634
692
(λ (s : (S : set M)), of' R M ↑s)) (mv_polynomial_aeval_of_surjective_of_closure hS)
635
693
end
636
694
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
+
637
714
end add_monoid_algebra
638
715
639
716
namespace monoid_algebra
@@ -642,31 +719,36 @@ open algebra submonoid submodule
642
719
643
720
section span
644
721
645
- variables {R : Type *} {M : Type *} [comm_semiring R] [monoid M]
722
+ section semiring
723
+
724
+ variables [comm_semiring R] [monoid M]
646
725
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) :=
649
728
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,
652
730
{ exact this (mem_span_support f) },
653
731
rw submodule.span_le,
654
732
exact subset_adjoin
655
733
end
656
734
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`. -/
657
737
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))) = ⊤ :=
659
739
begin
660
740
refine le_antisymm le_top _,
661
741
rw [← hS, adjoin_le_iff],
662
742
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,
665
745
{ intros s hs,
666
746
exact set.mem_bUnion_iff.2 ⟨f, ⟨hf, hs⟩⟩ },
667
747
exact adjoin_mono hincl (mem_adjoint_support f)
668
748
end
669
749
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`. -/
670
752
lemma support_gen_of_gen' {S : set (monoid_algebra R M)} (hS : algebra.adjoin R S = ⊤) :
671
753
algebra.adjoin R (of R M '' (⋃ f ∈ S, (f.support : set M))) = ⊤ :=
672
754
begin
@@ -676,10 +758,55 @@ begin
676
758
simp only [set.image_Union]
677
759
end
678
760
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
+
679
804
end span
680
805
681
- variables {R : Type *} {M : Type *} [comm_monoid M]
806
+ variables [comm_monoid M]
682
807
808
+ /-- If a set `S` generates a monoid `M`, then the image of `M` generates, as algebra,
809
+ `monoid_algebra R M`. -/
683
810
lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
684
811
(hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
685
812
(λ (s : S), of R M ↑s) : mv_polynomial S R → monoid_algebra R M) :=
@@ -698,8 +825,20 @@ begin
698
825
exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
699
826
end
700
827
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
703
842
704
843
end monoid_algebra
705
844
0 commit comments