Documentation

Mathlib.RingTheory.Generators

Generators of algebras #

Main definition #

structure Algebra.Generators (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :
Type (max (max u v) (w + 1))

A family of generators of a R-algebra S consists of

  1. vars: The type of variables.
  2. val : vars → S: The assignment of each variable to a value in S.
  3. σ: A section of R[X] → S.
  • vars : Type w

    The type of variables.

  • val : self.varsS

    The assignment of each variable to a value in S.

  • σ' : SMvPolynomial self.vars R

    A section of R[X] → S.

  • aeval_val_σ' : ∀ (s : S), (MvPolynomial.aeval self.val) (self.σ' s) = s
Instances For
    theorem Algebra.Generators.aeval_val_σ' {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (self : Algebra.Generators R S) (s : S) :
    (MvPolynomial.aeval self.val) (self.σ' s) = s
    @[reducible, inline]
    abbrev Algebra.Generators.Ring {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
    Type (max w u)

    The polynomial ring wrt a family of generators.

    Equations
    Instances For
      def Algebra.Generators.σ {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
      SP.Ring

      The designated section of wrt a family of generators.

      Equations
      • P = P.σ'
      Instances For
        def Algebra.Generators.Simps.σ {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
        SP.Ring

        See Note [custom simps projection]

        Equations
        Instances For
          @[simp]
          theorem Algebra.Generators.aeval_val_σ {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) (s : S) :
          (MvPolynomial.aeval P.val) (P s) = s
          instance Algebra.Generators.instRing {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
          Algebra P.Ring S
          Equations
          noncomputable instance Algebra.Generators.instIsScalarTowerRing {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R₀ : Type u_1} [CommRing R₀] [Algebra R₀ R] [Algebra R₀ S] [IsScalarTower R₀ R S] :
          IsScalarTower R₀ P.Ring S
          Equations
          • =
          theorem Algebra.Generators.algebraMap_eq {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
          algebraMap P.Ring S = (MvPolynomial.aeval P.val)
          @[simp]
          theorem Algebra.Generators.algebraMap_apply {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) (x : P.Ring) :
          (algebraMap P.Ring S) x = (MvPolynomial.aeval P.val) x
          @[simp]
          theorem Algebra.Generators.σ_smul {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) (x : S) (y : S) :
          P x y = x * y
          noncomputable def Algebra.Generators.ofSurjective {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {vars : Type u_1} (val : varsS) (h : Function.Surjective (MvPolynomial.aeval val)) :

          Construct Generators from an assignment I → S such that R[X] → S is surjective.

          Equations
          Instances For
            @[simp]
            theorem Algebra.Generators.ofSurjective_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {vars : Type u_1} (val : varsS) (h : Function.Surjective (MvPolynomial.aeval val)) :
            ∀ (a : vars), (Algebra.Generators.ofSurjective val h).val a = val a
            theorem Algebra.Generators.ofSurjective_vars {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {vars : Type u_1} (val : varsS) (h : Function.Surjective (MvPolynomial.aeval val)) :

            If algebraMap R S is surjective, the empty type generates S.

            Equations
            Instances For
              noncomputable def Algebra.Generators.id {R : Type u} [CommRing R] :

              The canonical generators for R as an R-algebra.

              Equations
              Instances For
                noncomputable def Algebra.Generators.ofAlgHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {I : Type u_1} (f : MvPolynomial I R →ₐ[R] S) (h : Function.Surjective f) :

                Construct Generators from an assignment I → S such that R[X] → S is surjective.

                Equations
                Instances For
                  noncomputable def Algebra.Generators.ofSet {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {s : Set S} (hs : Algebra.adjoin R s = ) :

                  Construct Generators from a family of generators of S.

                  Equations
                  Instances For
                    noncomputable def Algebra.Generators.self (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

                    The Generators containing the whole algebra, which induces the canonical map R[S] → S.

                    Equations
                    Instances For
                      @[simp]
                      theorem Algebra.Generators.self_val (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (a : S) :
                      @[simp]
                      theorem Algebra.Generators.self_σ (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (n : S) :
                      @[simp]
                      theorem Algebra.Generators.self_vars (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :
                      noncomputable def Algebra.Generators.localizationAway {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (r : R) [IsLocalization.Away r S] :

                      If S is the localization of R away from r, we obtain a canonical generator mapping to the inverse of r.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        noncomputable def Algebra.Generators.comp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) :

                        Given two families of generators S[X] → T and R[Y] → S, we may construct the family of generators R[X, Y] → T.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          theorem Algebra.Generators.comp_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) :
                          ∀ (a : Q.vars P.vars), (Q.comp P).val a = Sum.elim Q.val ((algebraMap S T) P.val) a
                          theorem Algebra.Generators.comp_σ {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) (x : T) :
                          (Q.comp P) x = Finsupp.sum (Q x) fun (n : Q.vars →₀ ) (r : S) => (MvPolynomial.rename Sum.inr) (P r) * (MvPolynomial.monomial (Finsupp.mapDomain Sum.inl n)) 1
                          theorem Algebra.Generators.comp_vars {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) :
                          (Q.comp P).vars = (Q.vars P.vars)
                          noncomputable def Algebra.Generators.extendScalars {R : Type u} (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (P : Algebra.Generators R T) :

                          If R → S → T is a tower of algebras, a family of generators R[X] → T gives a family of generators S[X] → T.

                          Equations
                          Instances For
                            @[simp]
                            theorem Algebra.Generators.extendScalars_val {R : Type u} (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (P : Algebra.Generators R T) :
                            ∀ (a : P.vars), (Algebra.Generators.extendScalars S P).val a = P.val a
                            theorem Algebra.Generators.extendScalars_vars {R : Type u} (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (P : Algebra.Generators R T) :
                            noncomputable def Algebra.Generators.baseChange {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] (P : Algebra.Generators R S) :

                            If P is a family of generators of S over R and T is an R-algebra, we obtain a natural family of generators of T ⊗[R] S over T.

                            Equations
                            Instances For
                              @[simp]
                              theorem Algebra.Generators.baseChange_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] (P : Algebra.Generators R S) (x : P.vars) :
                              P.baseChange.val x = 1 ⊗ₜ[R] P.val x
                              theorem Algebra.Generators.baseChange_vars {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] (P : Algebra.Generators R S) :
                              P.baseChange.vars = P.vars
                              structure Algebra.Generators.Hom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') [Algebra S S'] :
                              Type (max (max u_1 u_3) w)

                              Given a commuting square R --→ P = R[X] ---→ S | | ↓ ↓ R' -→ P' = R'[X'] → S A hom between P and P' is an assignment I → P' such that the arrows commute. Also see Algebra.Generators.Hom.equivAlgHom.

                              • val : P.varsP'.Ring

                                The assignment of each variable in I to a value in P' = R'[X'].

                              • aeval_val : ∀ (i : P.vars), (MvPolynomial.aeval P'.val) (self.val i) = (algebraMap S S') (P.val i)
                              Instances For
                                theorem Algebra.Generators.Hom.ext {R : Type u} {S : Type v} :
                                ∀ {inst : CommRing R} {inst_1 : CommRing S} {inst_2 : Algebra R S} {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} {inst_3 : CommRing R'} {inst_4 : CommRing S'} {inst_5 : Algebra R' S'} {P' : Algebra.Generators R' S'} {inst_6 : Algebra S S'} {x y : P.Hom P'}, x.val = y.valx = y
                                @[simp]
                                theorem Algebra.Generators.Hom.aeval_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra S S'] (self : P.Hom P') (i : P.vars) :
                                (MvPolynomial.aeval P'.val) (self.val i) = (algebraMap S S') (P.val i)
                                noncomputable def Algebra.Generators.Hom.toAlgHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] (f : P.Hom P') :
                                P.Ring →ₐ[R] P'.Ring

                                A hom between two families of generators gives an algebra homomorphism between the polynomial rings.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem Algebra.Generators.Hom.algebraMap_toAlgHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : P.Hom P') (x : P.Ring) :
                                  (MvPolynomial.aeval P'.val) (f.toAlgHom x) = (algebraMap S S') ((MvPolynomial.aeval P.val) x)
                                  @[simp]
                                  theorem Algebra.Generators.Hom.toAlgHom_X {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] (f : P.Hom P') (i : P.vars) :
                                  f.toAlgHom (MvPolynomial.X i) = f.val i
                                  theorem Algebra.Generators.Hom.toAlgHom_C {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] (f : P.Hom P') (r : R) :
                                  f.toAlgHom (MvPolynomial.C r) = MvPolynomial.C ((algebraMap R R') r)
                                  theorem Algebra.Generators.Hom.toAlgHom_monomial {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] (f : P.Hom P') (v : P.vars →₀ ) (r : R) :
                                  f.toAlgHom ((MvPolynomial.monomial v) r) = r v.prod fun (x1 : P.vars) (x2 : ) => f.val x1 ^ x2
                                  noncomputable def Algebra.Generators.Hom.equivAlgHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] :
                                  P.Hom P' { f : P.Ring →ₐ[R] P'.Ring // ∀ (x : P.Ring), (MvPolynomial.aeval P'.val) (f x) = (algebraMap S S') ((MvPolynomial.aeval P.val) x) }

                                  Giving a hom between two families of generators is equivalent to giving an algebra homomorphism between the polynomial rings.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    @[simp]
                                    theorem Algebra.Generators.Hom.equivAlgHom_apply_coe {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : P.Hom P') :
                                    (Algebra.Generators.Hom.equivAlgHom f) = f.toAlgHom
                                    @[simp]
                                    theorem Algebra.Generators.Hom.equivAlgHom_symm_apply_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : { f : P.Ring →ₐ[R] P'.Ring // ∀ (x : P.Ring), (MvPolynomial.aeval P'.val) (f x) = (algebraMap S S') ((MvPolynomial.aeval P.val) x) }) (i : P.vars) :
                                    (Algebra.Generators.Hom.equivAlgHom.symm f).val i = f (MvPolynomial.X i)
                                    def Algebra.Generators.defaultHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') [Algebra S S'] :
                                    P.Hom P'

                                    The hom from P to P' given by the designated section of P'.

                                    Equations
                                    • P.defaultHom P' = { val := P' (algebraMap S S') P.val, aeval_val := }
                                    Instances For
                                      @[simp]
                                      theorem Algebra.Generators.defaultHom_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') [Algebra S S'] :
                                      ∀ (a : P.vars), (P.defaultHom P').val a = (P' (algebraMap S S') P.val) a
                                      instance Algebra.Generators.instInhabitedHom {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') [Algebra S S'] :
                                      Inhabited (P.Hom P')
                                      Equations
                                      • P.instInhabitedHom P' = { default := P.defaultHom P' }
                                      noncomputable def Algebra.Generators.Hom.id {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
                                      P.Hom P

                                      The identity hom.

                                      Equations
                                      Instances For
                                        @[simp]
                                        theorem Algebra.Generators.Hom.id_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) (n : P.vars) :
                                        @[simp]
                                        theorem Algebra.Generators.Hom.toAlgHom_id {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
                                        (Algebra.Generators.Hom.id P).toAlgHom = AlgHom.id R P.Ring
                                        noncomputable def Algebra.Generators.Hom.comp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} {R'' : Type u_4} {S'' : Type u_5} [CommRing R''] [CommRing S''] [Algebra R'' S''] {P'' : Algebra.Generators R'' S''} [Algebra R' R''] [Algebra R' S''] [Algebra S S'] [Algebra S' S''] [Algebra S S''] [IsScalarTower R' R'' S''] [IsScalarTower R' S' S''] [IsScalarTower S S' S''] (f : P'.Hom P'') (g : P.Hom P') :
                                        P.Hom P''

                                        The composition of two homs.

                                        Equations
                                        • f.comp g = { val := fun (x : P.vars) => (MvPolynomial.aeval f.val) (g.val x), aeval_val := }
                                        Instances For
                                          @[simp]
                                          theorem Algebra.Generators.Hom.comp_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} {R'' : Type u_4} {S'' : Type u_5} [CommRing R''] [CommRing S''] [Algebra R'' S''] {P'' : Algebra.Generators R'' S''} [Algebra R' R''] [Algebra R' S''] [Algebra S S'] [Algebra S' S''] [Algebra S S''] [IsScalarTower R' R'' S''] [IsScalarTower R' S' S''] [IsScalarTower S S' S''] (f : P'.Hom P'') (g : P.Hom P') (x : P.vars) :
                                          (f.comp g).val x = (MvPolynomial.aeval f.val) (g.val x)
                                          @[simp]
                                          theorem Algebra.Generators.Hom.comp_id {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_2} {S' : Type u_1} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : P.Hom P') :
                                          @[simp]
                                          theorem Algebra.Generators.Hom.id_comp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_2} {S' : Type u_1} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') [Algebra S S'] (f : P.Hom P') :
                                          @[simp]
                                          theorem Algebra.Generators.Hom.toAlgHom_comp_apply {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) {R' : Type u_2} {S' : Type u_4} [CommRing R'] [CommRing S'] [Algebra R' S'] (P' : Algebra.Generators R' S') {R'' : Type u_1} {S'' : Type u_3} [CommRing R''] [CommRing S''] [Algebra R'' S''] (P'' : Algebra.Generators R'' S'') [Algebra R R'] [Algebra R' R''] [Algebra R' S''] [Algebra S S'] [Algebra S' S''] [Algebra S S''] [Algebra R R''] [IsScalarTower R R' R''] [IsScalarTower R' R'' S''] [IsScalarTower R' S' S''] [IsScalarTower S S' S''] (f : P.Hom P') (g : P'.Hom P'') (x : P.Ring) :
                                          (g.comp f).toAlgHom x = g.toAlgHom (f.toAlgHom x)
                                          noncomputable def Algebra.Generators.toComp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) :
                                          P.Hom (Q.comp P)

                                          Given families of generators X ⊆ T over S and Y ⊆ S over R, there is a map of generators R[Y] → R[X, Y].

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem Algebra.Generators.toComp_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) (i : P.vars) :
                                            (Q.toComp P).val i = MvPolynomial.X (Sum.inr i)
                                            noncomputable def Algebra.Generators.ofComp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) :
                                            (Q.comp P).Hom Q

                                            Given families of generators X ⊆ T over S and Y ⊆ S over R, there is a map of generators R[X, Y] → S[X].

                                            Equations
                                            • Q.ofComp P = { val := fun (i : (Q.comp P).vars) => Sum.elim MvPolynomial.X (MvPolynomial.C P.val) i, aeval_val := }
                                            Instances For
                                              @[simp]
                                              theorem Algebra.Generators.ofComp_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (Q : Algebra.Generators S T) (P : Algebra.Generators R S) (i : (Q.comp P).vars) :
                                              (Q.ofComp P).val i = Sum.elim MvPolynomial.X (MvPolynomial.C P.val) i
                                              noncomputable def Algebra.Generators.toExtendScalars {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (P : Algebra.Generators R T) :

                                              Given families of generators X ⊆ T, there is a map R[X] → S[X].

                                              Equations
                                              • P.toExtendScalars = { val := MvPolynomial.X, aeval_val := }
                                              Instances For
                                                @[simp]
                                                theorem Algebra.Generators.toExtendScalars_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {T : Type u_1} [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T] (P : Algebra.Generators R T) (n : P.vars) :
                                                P.toExtendScalars.val n = MvPolynomial.X n
                                                @[reducible, inline]
                                                abbrev Algebra.Generators.ker {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
                                                Ideal P.Ring

                                                The kernel of a presentation.

                                                Equations
                                                Instances For
                                                  def Algebra.Generators.Cotangent {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
                                                  Type (max u w)

                                                  The cotangent space of a presentation. This is a type synonym so that P = R[X] can act on it through the action of S without creating a diamond.

                                                  Equations
                                                  • P.Cotangent = P.ker.Cotangent
                                                  Instances For
                                                    noncomputable instance Algebra.Generators.instAddCommGroupCotangent {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (P : Algebra.Generators R S) :
                                                    AddCommGroup P.Cotangent
                                                    Equations
                                                    def Algebra.Generators.Cotangent.of {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.ker.Cotangent) :
                                                    P.Cotangent

                                                    The identity map P.ker.Cotangent → P.Cotangent into the type synonym.

                                                    Equations
                                                    Instances For
                                                      def Algebra.Generators.Cotangent.val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.Cotangent) :
                                                      P.ker.Cotangent

                                                      The identity map P.Cotangent → P.ker.Cotangent from the type synonym.

                                                      Equations
                                                      • x.val = x
                                                      Instances For
                                                        theorem Algebra.Generators.Cotangent.ext {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {x : P.Cotangent} {y : P.Cotangent} (e : x.val = y.val) :
                                                        x = y
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_add {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.Cotangent) (y : P.Cotangent) :
                                                        (x + y).val = x.val + y.val
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.of_val {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.Cotangent) :
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_of {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (w : P.ker.Cotangent) :
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_sub {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.Cotangent) (y : P.Cotangent) :
                                                        (x - y).val = x.val - y.val
                                                        theorem Algebra.Generators.Cotangent.smul_eq_zero_of_mem {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (p : P.Ring) (hp : p P.ker) (m : P.ker.Cotangent) :
                                                        p m = 0
                                                        noncomputable instance Algebra.Generators.Cotangent.module {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} :
                                                        Module S P.Cotangent
                                                        Equations
                                                        • Algebra.Generators.Cotangent.module = Module.mk
                                                        noncomputable instance Algebra.Generators.Cotangent.module' {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R₀ : Type u_1} [CommRing R₀] [Algebra R₀ S] :
                                                        Module R₀ P.Cotangent
                                                        Equations
                                                        instance Algebra.Generators.instIsScalarTowerCotangent {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R₁ : Type u_1} {R₂ : Type u_2} [CommRing R₁] [CommRing R₂] [Algebra R₁ S] [Algebra R₂ S] [Algebra R₁ R₂] [IsScalarTower R₁ R₂ S] :
                                                        IsScalarTower R₁ R₂ P.Cotangent
                                                        Equations
                                                        • =
                                                        theorem Algebra.Generators.Cotangent.val_smul''' {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R₀ : Type u_1} [CommRing R₀] [Algebra R₀ S] (r : R₀) (x : P.Cotangent) :
                                                        (r x).val = P ((algebraMap R₀ S) r) x.val
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_smul {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (r : S) (x : P.Cotangent) :
                                                        (r x).val = P r x.val
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_smul' {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (r : P.Ring) (x : P.Cotangent) :
                                                        (r x).val = r x.val
                                                        @[simp]
                                                        theorem Algebra.Generators.Cotangent.val_smul'' {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (r : R) (x : P.Cotangent) :
                                                        (r x).val = r x.val
                                                        def Algebra.Generators.Cotangent.mk {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} :
                                                        P.ker →ₗ[P.Ring] P.Cotangent

                                                        The quotient map from the kernel of P = R[X] → S onto the cotangent space.

                                                        Equations
                                                        Instances For
                                                          @[simp]
                                                          theorem Algebra.Generators.Cotangent.val_mk {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} (x : P.ker) :
                                                          (Algebra.Generators.Cotangent.mk x).val = P.ker.toCotangent x
                                                          theorem Algebra.Generators.Cotangent.mk_surjective {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} :
                                                          Function.Surjective Algebra.Generators.Cotangent.mk
                                                          noncomputable def Algebra.Generators.Cotangent.map {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : P.Hom P') :
                                                          P.Cotangent →ₗ[S] P'.Cotangent

                                                          A hom between families of generators induce a map between cotangent spaces.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem Algebra.Generators.Cotangent.map_mk {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} [Algebra R R'] [Algebra S S'] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] (f : P.Hom P') (x : P.ker) :
                                                            (Algebra.Generators.Cotangent.map f) (Algebra.Generators.Cotangent.mk x) = Algebra.Generators.Cotangent.mk f.toAlgHom x,
                                                            theorem Algebra.Generators.Cotangent.map_comp {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {P : Algebra.Generators R S} {R' : Type u_1} {S' : Type u_2} [CommRing R'] [CommRing S'] [Algebra R' S'] {P' : Algebra.Generators R' S'} {R'' : Type u_4} {S'' : Type u_5} [CommRing R''] [CommRing S''] [Algebra R'' S''] (P'' : Algebra.Generators R'' S'') [Algebra R R'] [Algebra R' R''] [Algebra R' S''] [Algebra S S'] [Algebra S' S''] [Algebra S S''] [Algebra R S'] [IsScalarTower R R' S'] [IsScalarTower R S S'] [Algebra R R''] [IsScalarTower R R' R''] [IsScalarTower R' R'' S''] [IsScalarTower R' S' S''] [IsScalarTower S S' S''] [Algebra R S''] [IsScalarTower R R'' S''] [IsScalarTower R S S''] (f : P.Hom P') (g : P'.Hom P'') :