File: Mathlib/NumberTheory/FunctionField.lean

full_name: FunctionField
code: /-- `F` is a function field over the finite field `Fq` if it is a finite
extension of the field of rational functions in one variable over `Fq`.

Note that `F` can be a function field over multiple, non-isomorphic, `Fq`.
-/
abbrev FunctionField [Algebra (RatFunc Fq) F] : Prop 
goal: Prop

full_name: functionField_iff
code: /-- `F` is a function field over `Fq` iff it is a finite extension of `Fq(t)`. -/
theorem functionField_iff (Fqt : Type*) [Field Fqt] [Algebra Fq[X] Fqt]
    [IsFractionRing Fq[X] Fqt] [Algebra (RatFunc Fq) F] [Algebra Fqt F] [Algebra Fq[X] F]
    [IsScalarTower Fq[X] Fqt F] [IsScalarTower Fq[X] (RatFunc Fq) F] :
    FunctionField Fq F ↔ FiniteDimensional Fqt F 
goal: FunctionField Fq F ↔ FiniteDimensional Fqt F

full_name: algebraMap_injective
code: theorem algebraMap_injective [Algebra Fq[X] F] [Algebra (RatFunc Fq) F]
    [IsScalarTower Fq[X] (RatFunc Fq) F] : Function.Injective (⇑(algebraMap Fq[X] F)) 
goal: Function.Injective ⇑(algebraMap Fq[X] F)

full_name: FunctionField.ringOfIntegers
code: /-- The function field analogue of `NumberField.ringOfIntegers`:
`FunctionField.ringOfIntegers Fq Fqt F` is the integral closure of `Fq[t]` in `F`.

We don't actually assume `F` is a function field over `Fq` in the definition,
only when proving its properties.
-/
def ringOfIntegers [Algebra Fq[X] F] 
goal: Subalgebra Fq[X] F

full_name: FunctionField.ringOfIntegers.instIsDomainSubtypeMemSubalgebraPolynomial
code: instance : IsDomain (ringOfIntegers Fq F) 
goal: IsDomain ↥(FunctionField.ringOfIntegers Fq F)

full_name: FunctionField.ringOfIntegers.instIsIntegralClosureSubtypeMemSubalgebraPolynomial
code: instance : IsIntegralClosure (ringOfIntegers Fq F) Fq[X] F 
goal: IsIntegralClosure (↥(FunctionField.ringOfIntegers Fq F)) Fq[X] F

full_name: FunctionField.ringOfIntegers.algebraMap_injective
code: theorem algebraMap_injective : Function.Injective (⇑(algebraMap Fq[X] (ringOfIntegers Fq F))) 
goal: Function.Injective ⇑(algebraMap Fq[X] ↥(FunctionField.ringOfIntegers Fq F))

full_name: FunctionField.ringOfIntegers.not_isField
code: theorem not_isField : ¬IsField (ringOfIntegers Fq F) 
goal: ¬IsField ↥(FunctionField.ringOfIntegers Fq F)

full_name: FunctionField.ringOfIntegers.instIsFractionRingSubtypeMemSubalgebraPolynomial
code: instance : IsFractionRing (ringOfIntegers Fq F) F 
goal: IsFractionRing (↥(FunctionField.ringOfIntegers Fq F)) F

full_name: FunctionField.ringOfIntegers.instIsIntegrallyClosedSubtypeMemSubalgebraPolynomial
code: instance : IsIntegrallyClosed (ringOfIntegers Fq F) 
goal: IsIntegrallyClosed ↥(FunctionField.ringOfIntegers Fq F)

full_name: FunctionField.ringOfIntegers.instIsNoetherianPolynomialSubtypeMemSubalgebraOfIsSeparableRatFunc
code: instance [Algebra.IsSeparable (RatFunc Fq) F] : IsNoetherian Fq[X] (ringOfIntegers Fq F) 
goal: IsNoetherian Fq[X] ↥(FunctionField.ringOfIntegers Fq F)

full_name: FunctionField.ringOfIntegers.instIsDedekindDomainSubtypeMemSubalgebraPolynomialOfIsSeparableRatFunc
code: instance [Algebra.IsSeparable (RatFunc Fq) F] : IsDedekindDomain (ringOfIntegers Fq F) 
goal: IsDedekindDomain ↥(FunctionField.ringOfIntegers Fq F)

full_name: FunctionField.inftyValuationDef
code: /-- The valuation at infinity is the nonarchimedean valuation on `Fq(t)` with uniformizer `1/t`.
Explicitly, if `f/g ∈ Fq(t)` is a nonzero quotient of polynomials, its valuation at infinity is
`Multiplicative.ofAdd(degree(f) - degree(g))`. -/
def inftyValuationDef (r : RatFunc Fq) : ℤₘ₀ 
goal: ℤₘ₀

full_name: FunctionField.InftyValuation.map_zero'
code: theorem InftyValuation.map_zero' : inftyValuationDef Fq 0 = 0 
goal: FunctionField.inftyValuationDef Fq 0 = 0

full_name: FunctionField.InftyValuation.map_one'
code: theorem InftyValuation.map_one' : inftyValuationDef Fq 1 = 1 
goal: FunctionField.inftyValuationDef Fq 1 = 1

full_name: FunctionField.InftyValuation.map_mul'
code: theorem InftyValuation.map_mul' (x y : RatFunc Fq) :
    inftyValuationDef Fq (x * y) = inftyValuationDef Fq x * inftyValuationDef Fq y 
goal: FunctionField.inftyValuationDef Fq (x * y) = FunctionField.inftyValuationDef Fq x * FunctionField.inftyValuationDef Fq y

full_name: FunctionField.InftyValuation.map_add_le_max'
code: theorem InftyValuation.map_add_le_max' (x y : RatFunc Fq) :
    inftyValuationDef Fq (x + y) ≤ max (inftyValuationDef Fq x) (inftyValuationDef Fq y) 
goal: FunctionField.inftyValuationDef Fq (x + y) ≤
  max (FunctionField.inftyValuationDef Fq x) (FunctionField.inftyValuationDef Fq y)

full_name: FunctionField.inftyValuation_of_nonzero
code: @[simp]
theorem inftyValuation_of_nonzero {x : RatFunc Fq} (hx : x ≠ 0) :
    inftyValuationDef Fq x = Multiplicative.ofAdd x.intDegree 
goal: FunctionField.inftyValuationDef Fq x = ↑(Multiplicative.ofAdd x.intDegree)

full_name: FunctionField.inftyValuation
code: /-- The valuation at infinity on `Fq(t)`. -/
def inftyValuation : Valuation (RatFunc Fq) ℤₘ₀ 
goal: Valuation (RatFunc Fq) ℤₘ₀

full_name: FunctionField.inftyValuation_apply
code: @[simp]
theorem inftyValuation_apply {x : RatFunc Fq} : inftyValuation Fq x = inftyValuationDef Fq x 
goal: (FunctionField.inftyValuation Fq) x = FunctionField.inftyValuationDef Fq x

full_name: FunctionField.inftyValuation.C
code: @[simp]
theorem inftyValuation.C {k : Fq} (hk : k ≠ 0) :
    inftyValuationDef Fq (RatFunc.C k) = Multiplicative.ofAdd (0 : ℤ) 
goal: FunctionField.inftyValuationDef Fq (RatFunc.C k) = ↑(Multiplicative.ofAdd 0)

full_name: FunctionField.inftyValuation.X
code: @[simp]
theorem inftyValuation.X : inftyValuationDef Fq RatFunc.X = Multiplicative.ofAdd (1 : ℤ) 
goal: FunctionField.inftyValuationDef Fq RatFunc.X = ↑(Multiplicative.ofAdd 1)

full_name: FunctionField.inftyValuation.polynomial
code: @[simp]
theorem inftyValuation.polynomial {p : Fq[X]} (hp : p ≠ 0) :
    inftyValuationDef Fq (algebraMap Fq[X] (RatFunc Fq) p) =
      Multiplicative.ofAdd (p.natDegree : ℤ) 
goal: FunctionField.inftyValuationDef Fq ((algebraMap Fq[X] (RatFunc Fq)) p) = ↑(Multiplicative.ofAdd ↑p.natDegree)

full_name: FunctionField.inftyValuedFqt
code: /-- The valued field `Fq(t)` with the valuation at infinity. -/
def inftyValuedFqt : Valued (RatFunc Fq) ℤₘ₀ 
goal: Valued (RatFunc Fq) ℤₘ₀

full_name: FunctionField.inftyValuedFqt.def
code: theorem inftyValuedFqt.def {x : RatFunc Fq} :
    @Valued.v (RatFunc Fq) _ _ _ (inftyValuedFqt Fq) x = inftyValuationDef Fq x 
goal: Valued.v x = FunctionField.inftyValuationDef Fq x

full_name: FunctionField.FqtInfty
code: /-- The completion `Fq((t⁻¹))` of `Fq(t)` with respect to the valuation at infinity. -/
def FqtInfty 
goal: Type

full_name: FunctionField.instFieldFqtInfty
code: instance : Field (FqtInfty Fq) 
goal: Field (FunctionField.FqtInfty Fq)

full_name: FunctionField.instInhabitedFqtInfty
code: instance : Inhabited (FqtInfty Fq) 
goal: Inhabited (FunctionField.FqtInfty Fq)

full_name: FunctionField.valuedFqtInfty
code: /-- The valuation at infinity on `k(t)` extends to a valuation on `FqtInfty`. -/
instance valuedFqtInfty : Valued (FqtInfty Fq) ℤₘ₀ 
goal: Valued (FunctionField.FqtInfty Fq) ℤₘ₀

full_name: FunctionField.valuedFqtInfty.def
code: theorem valuedFqtInfty.def {x : FqtInfty Fq} :
    Valued.v x = @Valued.extension (RatFunc Fq) _ _ _ (inftyValuedFqt Fq) x 
goal: Valued.v x = Valued.extension x