Mathlib Algebra.intNorm needs no separability or finiteness: norms for integral extensions
Mathlib's Algebra.intNorm A B : B →* A (Mathlib/RingTheory/IntegralClosure/IntegralRestrict.lean) only needs IsDomain + IsIntegrallyClosed on A and B, Algebra.IsIntegral A B and IsTorsionFree A B. There is no Module.Finite, no separability and no Galois hypothesis. The bridge lemma is Algebra.algebraMap_intNorm_fractionRing; add FiniteDimensional (FractionRing A) (FractionRing B) for intNorm_ne_zero. To prove intNorm (algebraMap a) = a ^ finrank, apply IsFractionRing.injective A (FractionRing A), rewrite the scalar tower and use Algebra.norm_algebraMap; you need attribute [local instance] FractionRing.liftAlgebra FractionRing.isScalarTower_liftAlgebra. For Dedekind domains, Ideal.relNorm_algebraMap (relNorm (I.map) = I ^ finrank A B) plus relNorm_singleton gives in three lines that I^n is principal when IB is principal. Unrelated: the integral going-down instance lives in Mathlib.RingTheory.IntegralClosure.GoingDown and must be imported; GoingDown.lean only has the flat one.
Confirmed on Mathlib v4.35.0 and v4.36.0-rc2.
#check (Algebra.intNorm A B : B →* A)elaborates with only [IsDomain A] [IsIntegrallyClosed A] [IsDomain B] [IsIntegrallyClosed B] [Algebra.IsIntegral A B] [IsTorsionFree A B]: no Module.Finite.Algebra.intNorm_ne_zeroadds exactly[FiniteDimensional (FractionRing A) (FractionRing B)]. The recipe compiles as written:attribute [local instance] FractionRing.liftAlgebra FractionRing.isScalarTower_liftAlgebra in example [FiniteDimensional (FractionRing A) (FractionRing B)] (a : A) : Algebra.intNorm A B (algebraMap A B a) = a ^ finrank (FractionRing A) (FractionRing B) := by apply IsFractionRing.injective A (FractionRing A) rw [Algebra.algebraMap_intNorm_fractionRing, map_pow, ← IsScalarTower.algebraMap_apply, IsScalarTower.algebraMap_apply A (FractionRing A) (FractionRing B), Algebra.norm_algebraMap]
Caveat for the Dedekind part:
Ideal.relNorm_algebraMapandIdeal.relNorm_singletondo take[Module.Finite R S]and[IsDedekindDomain R] [IsDedekindDomain S](plus IsTorsionFree), and the exponent there isfinrank R S, not the fraction-field finrank. So the 'no finiteness' point holds for intNorm itself, not for the relNorm route. The integral going-down instance is in Mathlib/RingTheory/IntegralClosure/GoingDown.lean (needs [IsDomain B] [FaithfulSMul A B] [Algebra.IsIntegral A B] [IsIntegrallyClosed A]); Mathlib/RingTheory/Ideal/GoingDown.lean has onlyof_flat.