@@ -7,6 +7,7 @@ Authors: Johan Commelin
7
7
import ring_theory.noetherian
8
8
import ring_theory.ideal.operations
9
9
import ring_theory.algebra_tower
10
+ import group_theory.finiteness
10
11
11
12
/-!
12
13
# Finiteness conditions in commutative algebra
@@ -558,3 +559,69 @@ ring_hom.finite_presentation.of_finite_type
558
559
end finite_presentation
559
560
560
561
end alg_hom
562
+
563
+ section monoid_algebra
564
+
565
+ namespace add_monoid_algebra
566
+
567
+ open algebra add_submonoid
568
+
569
+ variables {R : Type *} {M : Type *} [add_comm_monoid M]
570
+
571
+ lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
572
+ (hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
573
+ (λ (s : S), of R M (multiplicative.of_add ↑s)) : mv_polynomial S R → add_monoid_algebra R M) :=
574
+ begin
575
+ refine λ f, induction_on f (λ m, _) _ _,
576
+ { have : m ∈ closure S := hS.symm ▸ mem_top _,
577
+ refine closure_induction this (λ m hm, _) _ _,
578
+ { exact ⟨mv_polynomial.X ⟨m, hm⟩, mv_polynomial.aeval_X _ _⟩ },
579
+ { exact ⟨1 , alg_hom.map_one _⟩ },
580
+ { rintro m₁ m₂ ⟨P₁, hP₁⟩ ⟨P₂, hP₂⟩,
581
+ exact ⟨P₁ * P₂, by rw [alg_hom.map_mul, hP₁, hP₂, of_apply, of_apply, of_apply,
582
+ single_mul_single, one_mul]; refl⟩ } },
583
+ { rintro f g ⟨P, rfl⟩ ⟨Q, rfl⟩,
584
+ exact ⟨P + Q, alg_hom.map_add _ _ _⟩ },
585
+ { rintro r f ⟨P, rfl⟩,
586
+ exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
587
+ end
588
+
589
+ instance ft_of_fg [comm_ring R] [h : add_monoid.fg M] : finite_type R (add_monoid_algebra R M) :=
590
+ begin
591
+ obtain ⟨S, hS⟩ := h.out,
592
+ exact (finite_type.mv_polynomial R (S : set M)).of_surjective (mv_polynomial.aeval
593
+ (λ (s : (S : set M)), of R M s.1 )) (mv_polynomial_aeval_of_surjective_of_closure hS)
594
+ end
595
+
596
+ end add_monoid_algebra
597
+
598
+ namespace monoid_algebra
599
+
600
+ open algebra submonoid
601
+
602
+ variables {R : Type *} {M : Type *} [comm_monoid M]
603
+
604
+ lemma mv_polynomial_aeval_of_surjective_of_closure [comm_semiring R] {S : set M}
605
+ (hS : closure S = ⊤) : function.surjective (mv_polynomial.aeval
606
+ (λ (s : S), of R M ↑s) : mv_polynomial S R → monoid_algebra R M) :=
607
+ begin
608
+ refine λ f, induction_on f (λ m, _) _ _,
609
+ { have : m ∈ closure S := hS.symm ▸ mem_top _,
610
+ refine closure_induction this (λ m hm, _) _ _,
611
+ { exact ⟨mv_polynomial.X ⟨m, hm⟩, mv_polynomial.aeval_X _ _⟩ },
612
+ { exact ⟨1 , alg_hom.map_one _⟩ },
613
+ { rintro m₁ m₂ ⟨P₁, hP₁⟩ ⟨P₂, hP₂⟩,
614
+ exact ⟨P₁ * P₂, by rw [alg_hom.map_mul, hP₁, hP₂, of_apply, of_apply, of_apply,
615
+ single_mul_single, one_mul]⟩ } },
616
+ { rintro f g ⟨P, rfl⟩ ⟨Q, rfl⟩,
617
+ exact ⟨P + Q, alg_hom.map_add _ _ _⟩ },
618
+ { rintro r f ⟨P, rfl⟩,
619
+ exact ⟨r • P, alg_hom.map_smul _ _ _⟩ }
620
+ end
621
+
622
+ instance ft_of_fg [comm_ring R] [monoid.fg M] : finite_type R (monoid_algebra R M) :=
623
+ add_monoid_algebra.ft_of_fg.equiv (monoid_algebra.to_additive_alg_equiv R M).symm
624
+
625
+ end monoid_algebra
626
+
627
+ end monoid_algebra
0 commit comments