-- Lean 4 proof step from Mathlib.RingTheory.Ideal.Norm.RelNorm (goal)
Goal:
R : Type u_1
inst : CommRing R
inst_1 : IsDomain R
S : Type u_3
inst_2 : CommRing S
inst_3 : IsDomain S
inst_4 : IsIntegrallyClosed R
inst_5 : IsIntegrallyClosed S
inst_6 : Algebra R S
inst_7 : Module.Finite R S
inst_8 : IsTorsionFree R S
inst_9 : IsDedekindDomain R
inst_10 : IsDedekindDomain S
I J : Ideal S
inst_11 : Nontrivial R
h : Nontrivial S
P : Ideal R
hP : P.IsMaximal
hP0 : ¬P = ⊥
this : NeZero P
P' : Submonoid S := Algebra.algebraMapSubmonoid S P.primeCompl
neg :
  spanNorm (Localization.AtPrime P)
      (HMul.hMul (α := Ideal (Localization (M := S) P'))
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)})
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J)) =
    HMul.hMul (α := Ideal (Localization.AtPrime P))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)}))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J))
neg₁ :
  spanNorm (Localization.AtPrime P)
      (HMul.hMul (α := Ideal (Localization (M := S) P'))
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)})
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J)})) =
    HMul.hMul (α := Ideal (Localization.AtPrime P))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)}))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (span
          {IsPrincipal.generator
              (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J)}))
⊢ spanNorm (Localization.AtPrime P)
      (HMul.hMul (α := Ideal (Localization (M := S) P'))
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J)) =
    HMul.hMul (α := Ideal (Localization.AtPrime P))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I))
      (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
        (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J))
have neg₂ : spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
    (span
      {HMul.hMul (α := Localization (M := S) P')
          (IsPrincipal.generator
            (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I))
          (IsPrincipal.generator
            (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J))}) =
  HMul.hMul (α := Ideal (Localization.AtPrime P))
    (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
      (span
        {IsPrincipal.generator
            (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) I)}))
    (spanNorm (Localization.AtPrime P) (S := Localization (M := S) P')
      (span
        {IsPrincipal.generator
            (map (F := S →+* Localization (M := S) P') (algebraMap S (Localization (M := S) P')) J)}))
Tactic: rw [← (I.map _).span_singleton_generator, ← (J.map _).span_singleton_generator,
    span_singleton_mul_span_singleton, spanNorm_singleton, spanNorm_singleton,
    spanNorm_singleton, span_singleton_mul_span_singleton, map_mul]