File: Mathlib/RingTheory/FinitePresentation.lean

full_name: Algebra.FinitePresentation.out
code: /-- An algebra over a commutative semiring is `Algebra.FinitePresentation` if it is the quotient of
a polynomial ring in `n` variables by a finitely generated ideal. -/
class Algebra.FinitePresentation [CommSemiring R] [Semiring A] [Algebra R A] : Prop where
  out : ∃ (n : ℕ) (f : MvPolynomial (Fin n) R →ₐ[R] A), Surjective f ∧ f.toRingHom.ker.FG
goal: ∃ n f, Function.Surjective ⇑f ∧ (RingHom.ker f.toRingHom).FG

full_name: Algebra.FinitePresentation
code: /-- An algebra over a commutative semiring is `Algebra.FinitePresentation` if it is the quotient of
a polynomial ring in `n` variables by a finitely generated ideal. -/
class Algebra.FinitePresentation [CommSemiring R] [Semiring A] [Algebra R A] : Prop where
  out : ∃ (n : ℕ) (f : MvPolynomial (Fin n) R →ₐ[R] A), Surjective f ∧ f.toRingHom.ker.FG
goal: Prop

full_name: Algebra.FiniteType.of_finitePresentation
code: /-- A finitely presented algebra is of finite type. -/
instance of_finitePresentation [FinitePresentation R A] : FiniteType R A 
goal: Algebra.FiniteType R A

full_name: Algebra.FinitePresentation.of_finiteType
code: /-- An algebra over a Noetherian ring is finitely generated if and only if it is finitely
presented. -/
theorem of_finiteType [IsNoetherianRing R] : FiniteType R A ↔ FinitePresentation R A 
goal: Algebra.FiniteType R A ↔ Algebra.FinitePresentation R A

full_name: Algebra.FinitePresentation.equiv
code: /-- If `e : A ≃ₐ[R] B` and `A` is finitely presented, then so is `B`. -/
theorem equiv [FinitePresentation R A] (e : A ≃ₐ[R] B) : FinitePresentation R B 
goal: Algebra.FinitePresentation R B

full_name: Algebra.FinitePresentation.mvPolynomial
code: /-- The ring of polynomials in finitely many variables is finitely presented. -/
protected instance mvPolynomial (ι : Type*) [Finite ι] :
    FinitePresentation R (MvPolynomial ι R) 
goal: Algebra.FinitePresentation R (MvPolynomial ι R)

full_name: Algebra.FinitePresentation.self
code: /-- `R` is finitely presented as `R`-algebra. -/
instance self : FinitePresentation R R 
goal: Algebra.FinitePresentation R R

full_name: Algebra.FinitePresentation.polynomial
code: /-- `R[X]` is finitely presented as `R`-algebra. -/
instance polynomial : FinitePresentation R R[X] 
goal: Algebra.FinitePresentation R R[X]

full_name: Algebra.FinitePresentation.quotient
code: /-- The quotient of a finitely presented algebra by a finitely generated ideal is finitely
presented. -/
protected theorem quotient {I : Ideal A} (h : I.FG) [FinitePresentation R A] :
    FinitePresentation R (A ⧸ I) 
goal: Algebra.FinitePresentation R (A ⧸ I)

full_name: Algebra.FinitePresentation.of_surjective
code: /-- If `f : A →ₐ[R] B` is surjective with finitely generated kernel and `A` is finitely presented,
then so is `B`. -/
theorem of_surjective {f : A →ₐ[R] B} (hf : Function.Surjective f) (hker : f.toRingHom.ker.FG)
    [FinitePresentation R A] : FinitePresentation R B 
goal: Algebra.FinitePresentation R B

full_name: Algebra.FinitePresentation.iff
code: theorem iff :
    FinitePresentation R A ↔
      ∃ (n : _) (I : Ideal (MvPolynomial (Fin n) R)) (_ : (_ ⧸ I) ≃ₐ[R] A), I.FG 
goal: Algebra.FinitePresentation R A ↔ ∃ n I x, I.FG

full_name: Algebra.FinitePresentation.iff_quotient_mvPolynomial'
code: /-- An algebra is finitely presented if and only if it is a quotient of a polynomial ring whose
variables are indexed by a fintype by a finitely generated ideal. -/
theorem iff_quotient_mvPolynomial' :
    FinitePresentation R A ↔
      ∃ (ι : Type*) (_ : Fintype ι) (f : MvPolynomial ι R →ₐ[R] A),
        Surjective f ∧ f.toRingHom.ker.FG 
goal: Algebra.FinitePresentation R A ↔ ∃ ι x f, Function.Surjective ⇑f ∧ (RingHom.ker f.toRingHom).FG

full_name: Algebra.FinitePresentation.mvPolynomial_of_finitePresentation
code: /-- If `A` is a finitely presented `R`-algebra, then `MvPolynomial (Fin n) A` is finitely presented
as `R`-algebra. -/
theorem mvPolynomial_of_finitePresentation [FinitePresentation.{w₁, w₂} R A]
    (ι : Type v) [Finite ι] :
    FinitePresentation.{w₁, max v w₂} R (MvPolynomial ι A) 
goal: Algebra.FinitePresentation R (MvPolynomial ι A)

full_name: Algebra.FinitePresentation.trans
code: /-- If `A` is an `R`-algebra and `S` is an `A`-algebra, both finitely presented, then `S` is
  finitely presented as `R`-algebra. -/
theorem trans [Algebra A B] [IsScalarTower R A B] [FinitePresentation R A]
    [FinitePresentation A B] : FinitePresentation R B 
goal: Algebra.FinitePresentation R B

full_name: Algebra.FinitePresentation.of_restrict_scalars_finitePresentation
code: theorem of_restrict_scalars_finitePresentation [Algebra A B] [IsScalarTower R A B]
    [FinitePresentation.{w₁, w₃} R B] [FiniteType R A] :
    FinitePresentation.{w₂, w₃} A B 
goal: Algebra.FinitePresentation A B

full_name: Algebra.FinitePresentation.ker_fg_of_mvPolynomial
code: /-- This is used to prove the strictly stronger `ker_fg_of_surjective`. Use it instead. -/
theorem ker_fg_of_mvPolynomial {n : ℕ} (f : MvPolynomial (Fin n) R →ₐ[R] A)
    (hf : Function.Surjective f) [FinitePresentation R A] : f.toRingHom.ker.FG 
goal: (RingHom.ker f.toRingHom).FG

full_name: Algebra.FinitePresentation.ker_fG_of_surjective
code: /-- If `f : A →ₐ[R] B` is a surjection between finitely-presented `R`-algebras, then the kernel of
`f` is finitely generated. -/
theorem ker_fG_of_surjective (f : A →ₐ[R] B) (hf : Function.Surjective f)
    [FinitePresentation R A] [FinitePresentation R B] : f.toRingHom.ker.FG 
goal: (RingHom.ker f.toRingHom).FG

full_name: RingHom.FinitePresentation
code: /-- A ring morphism `A →+* B` is of `RingHom.FinitePresentation` if `B` is finitely presented as
`A`-algebra. -/
def FinitePresentation (f : A →+* B) : Prop 
goal: Prop

full_name: RingHom.FiniteType.of_finitePresentation
code: theorem of_finitePresentation {f : A →+* B} (hf : f.FinitePresentation) : f.FiniteType 
goal: f.FiniteType

full_name: RingHom.FinitePresentation.id
code: theorem id : FinitePresentation (RingHom.id A) 
goal: (RingHom.id A).FinitePresentation

full_name: RingHom.FinitePresentation.comp_surjective
code: theorem comp_surjective {f : A →+* B} {g : B →+* C} (hf : f.FinitePresentation) (hg : Surjective g)
    (hker : g.ker.FG) : (g.comp f).FinitePresentation 
goal: (g.comp f).FinitePresentation

full_name: RingHom.FinitePresentation.of_surjective
code: theorem of_surjective (f : A →+* B) (hf : Surjective f) (hker : f.ker.FG) :
    f.FinitePresentation 
goal: f.FinitePresentation

full_name: RingHom.FinitePresentation.of_finiteType
code: theorem of_finiteType [IsNoetherianRing A] {f : A →+* B} : f.FiniteType ↔ f.FinitePresentation 
goal: f.FiniteType ↔ f.FinitePresentation

full_name: RingHom.FinitePresentation.comp
code: theorem comp {g : B →+* C} {f : A →+* B} (hg : g.FinitePresentation) (hf : f.FinitePresentation) :
    (g.comp f).FinitePresentation 
goal: (g.comp f).FinitePresentation

full_name: RingHom.FinitePresentation.of_comp_finiteType
code: theorem of_comp_finiteType (f : A →+* B) {g : B →+* C} (hg : (g.comp f).FinitePresentation)
    (hf : f.FiniteType) : g.FinitePresentation 
goal: g.FinitePresentation

full_name: AlgHom.FinitePresentation
code: /-- An algebra morphism `A →ₐ[R] B` is of `AlgHom.FinitePresentation` if it is of finite
presentation as ring morphism. In other words, if `B` is finitely presented as `A`-algebra. -/
def FinitePresentation (f : A →ₐ[R] B) : Prop 
goal: Prop

full_name: AlgHom.FiniteType.of_finitePresentation
code: theorem of_finitePresentation {f : A →ₐ[R] B} (hf : f.FinitePresentation) : f.FiniteType 
goal: f.FiniteType

full_name: AlgHom.FinitePresentation.id
code: theorem id : FinitePresentation (AlgHom.id R A) 
goal: (AlgHom.id R A).FinitePresentation

full_name: AlgHom.FinitePresentation.comp
code: theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.FinitePresentation)
    (hf : f.FinitePresentation) : (g.comp f).FinitePresentation 
goal: (g.comp f).FinitePresentation

full_name: AlgHom.FinitePresentation.comp_surjective
code: theorem comp_surjective {f : A →ₐ[R] B} {g : B →ₐ[R] C} (hf : f.FinitePresentation)
    (hg : Surjective g) (hker : g.toRingHom.ker.FG) : (g.comp f).FinitePresentation 
goal: (g.comp f).FinitePresentation

full_name: AlgHom.FinitePresentation.of_surjective
code: theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) (hker : f.toRingHom.ker.FG) :
    f.FinitePresentation 
goal: f.FinitePresentation

full_name: AlgHom.FinitePresentation.of_finiteType
code: theorem of_finiteType [IsNoetherianRing A] {f : A →ₐ[R] B} : f.FiniteType ↔ f.FinitePresentation 
goal: f.FiniteType ↔ f.FinitePresentation

full_name: AlgHom.FinitePresentation.of_comp_finiteType
code: nonrec theorem of_comp_finiteType (f : A →ₐ[R] B) {g : B →ₐ[R] C}
    (h : (g.comp f).FinitePresentation) (h' : f.FiniteType) : g.FinitePresentation 
goal: g.FinitePresentation