-- Module: Mathlib.NumberTheory.NumberField.Units.Regulator
Goal:
K : Type u_1
inst : Field K
inst_1 : NumberField K
u v : Fin (rank K) → (𝓞 K)ˣ
hv : IsMaxRank v
h : Subgroup.closure (Set.range u) ⊔ torsion K ≤ Subgroup.closure (Set.range v) ⊔ torsion K
hu : IsMaxRank u
this :
  LE.le (α := Submodule ℤ (logSpace K))
    (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hu) : (a : Fin (rank K)) → logSpace K)))
    (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hv) : (a : Fin (rank K)) → logSpace K)))
pos :
  ZLattice.covolume (E := logSpace K)
        (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hu) : (a : Fin (rank K)) → logSpace K)))
        (volume : Measure (logSpace K)) /
      regOfFamily v =
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₁ :
  ZLattice.covolume (E := logSpace K)
        (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hu) : (a : Fin (rank K)) → logSpace K)))
        (volume : Measure (logSpace K)) /
      ZLattice.covolume (E := logSpace K)
        (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hv) : (a : Fin (rank K)) → logSpace K)))
        (volume : Measure (logSpace K)) =
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₂ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex (G := { w : InfinitePlace K // w ≠ w₀ } → ℝ)
          (toAddSubgroup (module_M := AddCommGroup.toIntModule ({ w : InfinitePlace K // w ≠ w₀ } → ℝ))
            (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hu) : (a : Fin (rank K)) → logSpace K))))
          (toAddSubgroup (module_M := AddCommGroup.toIntModule ({ w : InfinitePlace K // w ≠ w₀ } → ℝ))
            (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hv) : (a : Fin (rank K)) → logSpace K))))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₃ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex (G := { w : InfinitePlace K // w ≠ w₀ } → ℝ)
          (AddSubgroup.map (logEmbedding K)
            ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range u))))
          (toAddSubgroup (module_M := AddCommGroup.toIntModule ({ w : InfinitePlace K // w ≠ w₀ } → ℝ))
            (span ℤ (Set.range (ι := Fin (rank K)) (⇑(basisOfIsMaxRank hv) : (a : Fin (rank K)) → logSpace K))))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₄ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex (G := { w : InfinitePlace K // w ≠ w₀ } → ℝ)
          (AddSubgroup.map (logEmbedding K)
            ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range u))))
          (AddSubgroup.map (logEmbedding K)
            ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range v))))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₅ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range u)) ⊔
            AddMonoidHom.ker (M := { w : InfinitePlace K // w ≠ w₀ } → ℝ) (logEmbedding K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range v)) ⊔
            AddMonoidHom.ker (M := { w : InfinitePlace K // w ≠ w₀ } → ℝ) (logEmbedding K))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₆ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range u)) ⊔
            (Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ)) (torsion K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range v)) ⊔
            (Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ)) (torsion K))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₇ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range u) ⊔ torsion K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
              (Subgroup.closure (Set.range v)) ⊔
            (Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ)) (torsion K))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₈ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range u) ⊔ torsion K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range v) ⊔ torsion K))) :
      ℝ)
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)
pos₉ pos₁₀ :
  Eq (α := ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range u) ⊔ torsion K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range v) ⊔ torsion K))) :
      ℝ)
    (↑(AddSubgroup.relIndex.{u_1} (G := Additive (𝓞 K)ˣ)
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range u) ⊔ torsion K))
          ((Subgroup.toAddSubgroup : (a : Subgroup (𝓞 K)ˣ) → AddSubgroup (Additive (𝓞 K)ˣ))
            (Subgroup.closure (Set.range v) ⊔ torsion K))) :
      ℝ)
⊢ regOfFamily u / regOfFamily v =
    (↑((Subgroup.closure (Set.range u) ⊔ torsion K).relIndex (Subgroup.closure (Set.range v) ⊔ torsion K)) : ℝ)

Tactic:
rw [regOfFamily_of_isMaxRank hu, regOfFamily_of_isMaxRank hv,
      covolume_div_covolume_eq_relIndex _ _ this, span_basisOfIsMaxRank hu,
      span_basisOfIsMaxRank hv, AddSubgroup.relIndex_map_map, logEmbedding_ker,
      ← OrderIso.map_sup, ← OrderIso.map_sup, ← Subgroup.relIndex_toAddSubgroup]

Premises used: AddSubgroup.relIndex_map_map, NumberField.Units.span_basisOfIsMaxRank, ZLattice.covolume_div_covolume_eq_relIndex, NumberField.Units.regOfFamily_of_isMaxRank, OrderIso.map_sup, NumberField.Units.dirichletUnitTheorem.logEmbedding_ker, Subgroup.relIndex_toAddSubgroup