Module

RelNorm_eq_pow_of_isMaximal_of_isSeparable.lean

Nyll.AlgebraicCurves.FunctionFields.RelNorm_eq_pow_of_isMaximal_of_isSeparable
26 declarations indexed from sourceView source ↗

Rel Norm eq pow of is Maximal of is Separable

Imports3
  • Mathlib.RingTheory.Ideal.Norm.RelNorm
  • Mathlib.RingTheory.RamificationInertia.Inertia
  • Mathlib.FieldTheory.SeparableClosure
Imported by3

Declarations

Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
instance : Algebra (FractionRing R) (FractionRing S)
Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
instance : Algebra S 𝔼
Source context 9 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
instance : IsScalarTower S 𝕃 𝔼
Source context 10 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
instance : Algebra 𝕋 𝔼
Source context 11 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
instance : IsScalarTower S 𝕋 𝔼
Source context 12 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
instance : IsIntegralClosure 𝕋 S 𝔼
Source context 13 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
instance : IsScalarTower R 𝕋 𝔼
Source context 14 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
instance : FaithfulSMul S 𝔼
AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable.AlgebraicCurve.F10d.isSeparable_normalClosure
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
theorem isSeparable_normalClosure : Algebra.IsSeparable 𝕂 𝔼
Source context 16 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
instance : Algebra.IsSeparable 𝕂 𝔼
Source context 17 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
instance : Algebra.IsSeparable 𝕃 𝔼
Source context 19 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
instance : FiniteDimensional 𝕃 𝔼
Source context 20 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
instance : IsFractionRing 𝕋 𝔼
Source context 21 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃)
Source context 22 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
instance : Normal 𝕂 𝔼
Source context 23 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
instance : IsGalois 𝕂 𝔼
Source context 24 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
instance : Algebra 𝕂 (FractionRing 𝕋)
Source context 25 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
instance : Algebra 𝕃 (FractionRing 𝕋)
Source context 26 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
local instance : Algebra 𝕃 (FractionRing 𝕋) := FractionRing.liftAlgebra S (FractionRing 𝕋)
instance : IsGalois 𝕂 (FractionRing 𝕋)
Source context 27 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
local instance : Algebra 𝕃 (FractionRing 𝕋) := FractionRing.liftAlgebra S (FractionRing 𝕋)
local instance : IsGalois 𝕂 (FractionRing 𝕋) := by
  refine IsGalois.of_equiv_equiv (F := 𝕂) (E := 𝔼)
    (f := (FractionRing.algEquiv R 𝕂).symm.toRingEquiv)
    (g := (FractionRing.algEquiv 𝕋 𝔼).symm.toRingEquiv) ?_
  ext
  simpa using IsFractionRing.algEquiv_commutes (FractionRing.algEquiv R 𝕂).symm
    (FractionRing.algEquiv 𝕋 𝔼).symm _
instance : Module.Finite S 𝕋
Source context 28 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
local instance : Algebra 𝕃 (FractionRing 𝕋) := FractionRing.liftAlgebra S (FractionRing 𝕋)
local instance : IsGalois 𝕂 (FractionRing 𝕋) := by
  refine IsGalois.of_equiv_equiv (F := 𝕂) (E := 𝔼)
    (f := (FractionRing.algEquiv R 𝕂).symm.toRingEquiv)
    (g := (FractionRing.algEquiv 𝕋 𝔼).symm.toRingEquiv) ?_
  ext
  simpa using IsFractionRing.algEquiv_commutes (FractionRing.algEquiv R 𝕂).symm
    (FractionRing.algEquiv 𝕋 𝔼).symm _
local instance : Module.Finite S 𝕋 := IsIntegralClosure.finite S 𝕃 𝔼 𝕋
instance : Module.Finite R 𝕋
Source context 29 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
local instance : Algebra 𝕃 (FractionRing 𝕋) := FractionRing.liftAlgebra S (FractionRing 𝕋)
local instance : IsGalois 𝕂 (FractionRing 𝕋) := by
  refine IsGalois.of_equiv_equiv (F := 𝕂) (E := 𝔼)
    (f := (FractionRing.algEquiv R 𝕂).symm.toRingEquiv)
    (g := (FractionRing.algEquiv 𝕋 𝔼).symm.toRingEquiv) ?_
  ext
  simpa using IsFractionRing.algEquiv_commutes (FractionRing.algEquiv R 𝕂).symm
    (FractionRing.algEquiv 𝕋 𝔼).symm _
local instance : Module.Finite S 𝕋 := IsIntegralClosure.finite S 𝕃 𝔼 𝕋
local instance : Module.Finite R 𝕋 := Module.Finite.trans S 𝕋
instance : IsDedekindDomain 𝕋
AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable.AlgebraicCurve.F10d.relNorm_eq_pow_of_isMaximal_fractionRing
Source context 31 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Closure
variable (R S : Type*) [CommRing R] [CommRing S] [IsDedekindDomain R] [IsDedekindDomain S]
  [Algebra R S] [Module.IsTorsionFree R S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
local instance : Algebra S 𝔼 := ((algebraMap 𝕃 𝔼).comp (algebraMap S 𝕃)).toAlgebra
local instance : IsScalarTower S 𝕃 𝔼 := IsScalarTower.of_algebraMap_eq' rfl
local instance : Algebra 𝕋 𝔼 := inferInstanceAs (Algebra (integralClosure S 𝔼) 𝔼)
local instance : IsScalarTower S 𝕋 𝔼 := by
  change IsScalarTower S (integralClosure S 𝔼) 𝔼
  infer_instance
local instance : IsIntegralClosure 𝕋 S 𝔼 := integralClosure.isIntegralClosure S 𝔼
local instance : IsScalarTower R 𝕋 𝔼 :=
  IsScalarTower.of_algebraMap_eq fun r => Subtype.ext <| by
    change algebraMap R (AlgebraicClosure 𝕃) r
      = algebraMap 𝕃 (AlgebraicClosure 𝕃) (algebraMap S 𝕃 (algebraMap R S r))
    rw [IsScalarTower.algebraMap_apply R 𝕃 (AlgebraicClosure 𝕃), IsScalarTower.algebraMap_apply R
      S 𝕃]
local instance : FaithfulSMul S 𝔼 := (faithfulSMul_iff_algebraMap_injective S 𝔼).mpr <|
      (FaithfulSMul.algebraMap_injective 𝕃 𝔼).comp (FaithfulSMul.algebraMap_injective S 𝕃)
variable [Algebra.IsSeparable (FractionRing R) (FractionRing S)]
local instance : Algebra.IsSeparable 𝕂 𝔼 := isSeparable_normalClosure R S
local instance : Algebra.IsSeparable 𝕃 𝔼 := Algebra.isSeparable_tower_top_of_isSeparable 𝕂 𝕃 𝔼
variable [Module.Finite R S]
local instance : FiniteDimensional 𝕃 𝔼 := Module.Finite.right 𝕂 𝕃 𝔼
local instance : IsFractionRing 𝕋 𝔼 := by
  change IsFractionRing (integralClosure S 𝔼) 𝔼
  exact integralClosure.isFractionRing_of_finite_extension 𝕃 𝔼
local instance : IsAlgClosure 𝕂 (AlgebraicClosure 𝕃) :=
  IsAlgClosure.ofAlgebraic 𝕂 𝕃 (AlgebraicClosure 𝕃)
local instance : Normal 𝕂 𝔼 := normalClosure.normal _ _ _
local instance : IsGalois 𝕂 𝔼 := IsGalois.mk
local instance : Algebra 𝕂 (FractionRing 𝕋) := FractionRing.liftAlgebra R (FractionRing 𝕋)
local instance : Algebra 𝕃 (FractionRing 𝕋) := FractionRing.liftAlgebra S (FractionRing 𝕋)
local instance : IsGalois 𝕂 (FractionRing 𝕋) := by
  refine IsGalois.of_equiv_equiv (F := 𝕂) (E := 𝔼)
    (f := (FractionRing.algEquiv R 𝕂).symm.toRingEquiv)
    (g := (FractionRing.algEquiv 𝕋 𝔼).symm.toRingEquiv) ?_
  ext
  simpa using IsFractionRing.algEquiv_commutes (FractionRing.algEquiv R 𝕂).symm
    (FractionRing.algEquiv 𝕋 𝔼).symm _
local instance : Module.Finite S 𝕋 := IsIntegralClosure.finite S 𝕃 𝔼 𝕋
local instance : Module.Finite R 𝕋 := Module.Finite.trans S 𝕋
local instance : IsDedekindDomain 𝕋 := integralClosure.isDedekindDomain S 𝕃 𝔼
variable {R S}
theorem relNorm_eq_pow_of_isMaximal_fractionRing
    (P : Ideal S) (p : Ideal R) [P.LiesOver p] [P.IsMaximal] [p.IsMaximal] :
    Ideal.relNorm R P = p ^ P.inertiaDeg R
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Transport
variable {R S : Type*} [CommRing R] [CommRing S]
  [Algebra R S] [Module.IsTorsionFree R S] [Module.Finite R S]
  [IsDedekindDomain R] [IsDedekindDomain S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
instance : Algebra (FractionRing R) (FractionRing S)
AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable.AlgebraicCurve.F10d.relNorm_eq_pow_of_isMaximal_of_isSeparable
Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
noncomputable section
namespace AlgebraicCurve
namespace F10d
section Transport
variable {R S : Type*} [CommRing R] [CommRing S]
  [Algebra R S] [Module.IsTorsionFree R S] [Module.Finite R S]
  [IsDedekindDomain R] [IsDedekindDomain S]

-- Register only the required fraction-field map, as in Ring.NormalClosure.
local instance : Algebra (FractionRing R) (FractionRing S) :=
  FractionRing.liftAlgebra R (FractionRing S)
theorem relNorm_eq_pow_of_isMaximal_of_isSeparable (K L : Type*) [Field K] [Field L]
    [Algebra R K] [IsFractionRing R K] [Algebra S L] [IsFractionRing S L] [Algebra K L]
    [Algebra R L] [IsScalarTower R K L] [IsScalarTower R S L] [Algebra.IsSeparable K L]
    (P : Ideal S) (p : Ideal R) [P.LiesOver p] [P.IsMaximal] [p.IsMaximal] :
    Ideal.relNorm R P = p ^ P.inertiaDeg R
AlgebraicCurve.relNorm_eq_pow_of_isMaximal_of_isSeparable
Source context 2 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.FunctionFields.Proofs.RelNorm_eq_pow_of_isMaximal_of_isSeparable
theorem _root_.AlgebraicCurve.relNorm_eq_pow_of_isMaximal_of_isSeparable {R S : Type*} [CommRing
  R] [CommRing S]
    [IsDedekindDomain R] [IsDedekindDomain S] [Algebra R S] [Module.Finite R S]
      [Module.IsTorsionFree R S]
    (K L : Type*) [Field K] [Field L] [Algebra R K] [IsFractionRing R K] [Algebra S L]
      [IsFractionRing S L]
    [Algebra K L] [Algebra R L] [IsScalarTower R K L] [IsScalarTower R S L] [Algebra.IsSeparable K
      L]
    (P : Ideal S) (p : Ideal R) [P.LiesOver p] [P.IsMaximal] [p.IsMaximal] :
    Ideal.relNorm R P = p ^ P.inertiaDeg R