[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
⊢ 0 < normBound abv bS
[PROOFSTEP]
obtain ⟨i, j, k, hijk⟩ : ∃ i j k, Algebra.leftMulMatrix bS (bS i) j k ≠ 0 :=
  by
  by_contra' h
  obtain ⟨i⟩ := bS.index_nonempty
  apply bS.ne_zero i
  apply (injective_iff_map_eq_zero (Algebra.leftMulMatrix bS)).mp (Algebra.leftMulMatrix_injective bS)
  ext j k
  simp [h, DMatrix.zero_apply]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
⊢ ∃ i j k, ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
[PROOFSTEP]
by_contra' h
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
h : ∀ (i j k : ι), ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = 0
⊢ False
[PROOFSTEP]
obtain ⟨i⟩ := bS.index_nonempty
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
h : ∀ (i j k : ι), ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = 0
i : ι
⊢ False
[PROOFSTEP]
apply bS.ne_zero i
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
h : ∀ (i j k : ι), ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = 0
i : ι
⊢ ↑bS i = 0
[PROOFSTEP]
apply (injective_iff_map_eq_zero (Algebra.leftMulMatrix bS)).mp (Algebra.leftMulMatrix_injective bS)
[GOAL]
case intro.a
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
h : ∀ (i j k : ι), ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = 0
i : ι
⊢ ↑(Algebra.leftMulMatrix bS) (↑bS i) = 0
[PROOFSTEP]
ext j k
[GOAL]
case intro.a.a.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
h : ∀ (i j k : ι), ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = 0
i j k : ι
⊢ ↑(Algebra.leftMulMatrix bS) (↑bS i) j k = OfNat.ofNat 0 j k
[PROOFSTEP]
simp [h, DMatrix.zero_apply]
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
i j k : ι
hijk : ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
⊢ 0 < normBound abv bS
[PROOFSTEP]
simp only [normBound, Algebra.smul_def, eq_natCast]
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
i j k : ι
hijk : ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
⊢ 0 <
    ↑(Nat.factorial (Fintype.card ι)) *
      (↑(Fintype.card ι) *
          Finset.max'
            (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
              Finset.univ)
            (_ :
              ∃ x,
                x ∈
                  Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                    Finset.univ)) ^
        Fintype.card ι
[PROOFSTEP]
refine' mul_pos (Int.coe_nat_pos.mpr (Nat.factorial_pos _)) _
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
i j k : ι
hijk : ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
⊢ 0 <
    (↑(Fintype.card ι) *
        Finset.max'
          (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
            Finset.univ)
          (_ :
            ∃ x,
              x ∈
                Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                  Finset.univ)) ^
      Fintype.card ι
[PROOFSTEP]
refine' pow_pos (mul_pos (Int.coe_nat_pos.mpr (Fintype.card_pos_iff.mpr ⟨i⟩)) _) _
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
i j k : ι
hijk : ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
⊢ 0 <
    Finset.max'
      (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd)) Finset.univ)
      (_ :
        ∃ x,
          x ∈
            Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
              Finset.univ)
[PROOFSTEP]
refine' lt_of_lt_of_le (abv.pos hijk) (Finset.le_max' _ _ _)
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
i j k : ι
hijk : ↑(Algebra.leftMulMatrix bS) (↑bS i) j k ≠ 0
⊢ ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS i) j k) ∈
    Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd)) Finset.univ
[PROOFSTEP]
exact Finset.mem_image.mpr ⟨⟨i, j, k⟩, Finset.mem_univ _, rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑abv (↑(Algebra.norm R) a) ≤ normBound abv bS * y ^ Fintype.card ι
[PROOFSTEP]
conv_lhs => rw [← bS.sum_repr a]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
| ↑abv (↑(Algebra.norm R) a)
[PROOFSTEP]
rw [← bS.sum_repr a]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
| ↑abv (↑(Algebra.norm R) a)
[PROOFSTEP]
rw [← bS.sum_repr a]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
| ↑abv (↑(Algebra.norm R) a)
[PROOFSTEP]
rw [← bS.sum_repr a]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑abv (↑(Algebra.norm R) (∑ i : ι, ↑(↑bS.repr a) i • ↑bS i)) ≤ normBound abv bS * y ^ Fintype.card ι
[PROOFSTEP]
rw [Algebra.norm_apply, ← LinearMap.det_toMatrix bS]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑abv (↑(Algebra.norm R) (∑ i : ι, ↑(↑bS.repr a) i • ↑bS i)) ≤ normBound abv bS * y ^ Fintype.card ι
[PROOFSTEP]
simp only [Algebra.norm_apply, AlgHom.map_sum, AlgHom.map_smul, LinearEquiv.map_sum, LinearEquiv.map_smul,
  Algebra.toMatrix_lmul_eq, normBound, smul_mul_assoc, ← mul_pow]
  --Porting note: rest of proof was
    -- convert Matrix.det_sum_smul_le Finset.univ _ hy using 3
    -- · rw [Finset.card_univ, smul_mul_assoc, mul_comm]
    -- · intro i j k
    --   apply Finset.le_max'
    --   exact finset.mem_image.mpr ⟨⟨i, j, k⟩, Finset.mem_univ _, rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑abv (↑LinearMap.det (∑ x : ι, ↑(↑bS.repr a) x • ↑(Algebra.lmul R S) (↑bS x))) ≤
    Nat.factorial (Fintype.card ι) •
      (Fintype.card ι •
          (Finset.max'
              (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                Finset.univ)
              (_ :
                ∃ x,
                  x ∈
                    Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                      Finset.univ) *
            y)) ^
        Fintype.card ι
[PROOFSTEP]
rw [← LinearMap.det_toMatrix bS]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑abv (Matrix.det (↑(LinearMap.toMatrix bS bS) (∑ x : ι, ↑(↑bS.repr a) x • ↑(Algebra.lmul R S) (↑bS x)))) ≤
    Nat.factorial (Fintype.card ι) •
      (Fintype.card ι •
          (Finset.max'
              (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                Finset.univ)
              (_ :
                ∃ x,
                  x ∈
                    Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                      Finset.univ) *
            y)) ^
        Fintype.card ι
[PROOFSTEP]
convert Matrix.det_sum_smul_le (n := ι) Finset.univ _ hy using 3
[GOAL]
case h.e'_3.h.e'_6.h.e'_6
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ↑(LinearMap.toMatrix bS bS) (∑ x : ι, ↑(↑bS.repr a) x • ↑(Algebra.lmul R S) (↑bS x)) =
    ∑ k : ι, ↑(↑bS.repr a) k • ?convert_1 k
[PROOFSTEP]
simp
[GOAL]
case h.e'_3.h.e'_6.h.e'_6
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ∑ x : ι, ↑(↑bS.repr a) x • ↑(LinearMap.toMatrix bS bS) (↑(LinearMap.mul R S) (↑bS x)) =
    ∑ x : ι, ↑(↑bS.repr a) x • ?convert_1 x
[PROOFSTEP]
rfl
[GOAL]
case h.e'_4.h.e'_6.h.e'_5
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ Fintype.card ι •
      (Finset.max'
          (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
            Finset.univ)
          (_ :
            ∃ x,
              x ∈
                Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                  Finset.univ) *
        y) =
    Finset.card Finset.univ • y * ?convert_2
[PROOFSTEP]
rw [Finset.card_univ, smul_mul_assoc, mul_comm]
[GOAL]
case convert_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
⊢ ∀ (k i j : ι),
    ↑abv (↑(LinearMap.toMatrix bS bS) (↑(LinearMap.mul R S) (↑bS k)) i j) ≤
      Finset.max'
        (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd)) Finset.univ)
        (_ :
          ∃ x,
            x ∈
              Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
                Finset.univ)
[PROOFSTEP]
intro i j k
[GOAL]
case convert_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
i j k : ι
⊢ ↑abv (↑(LinearMap.toMatrix bS bS) (↑(LinearMap.mul R S) (↑bS i)) j k) ≤
    Finset.max'
      (Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd)) Finset.univ)
      (_ :
        ∃ x,
          x ∈
            Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd))
              Finset.univ)
[PROOFSTEP]
apply Finset.le_max'
[GOAL]
case convert_3.H2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
a : S
y : ℤ
hy : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y
i j k : ι
⊢ ↑abv (↑(LinearMap.toMatrix bS bS) (↑(LinearMap.mul R S) (↑bS i)) j k) ∈
    Finset.image (fun ijk => ↑abv (↑(Algebra.leftMulMatrix bS) (↑bS ijk.fst) ijk.snd.fst ijk.snd.snd)) Finset.univ
[PROOFSTEP]
exact Finset.mem_image.mpr ⟨⟨i, j, k⟩, Finset.mem_univ _, rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
obtain ⟨i⟩ := bS.index_nonempty
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
have him : (Finset.univ.image fun k => abv (bS.repr a k)).Nonempty :=
  ⟨_, Finset.mem_image.mpr ⟨i, Finset.mem_univ _, rfl⟩⟩
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
set y' : ℤ := Finset.max' _ him with y'_def
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
have hy' : ∀ k, abv (bS.repr a k) ≤ y' := by
  intro k
  exact @Finset.le_max' ℤ _ _ _ (Finset.mem_image.mpr ⟨k, Finset.mem_univ _, rfl⟩)
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
⊢ ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
[PROOFSTEP]
intro k
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
k : ι
⊢ ↑abv (↑(↑bS.repr a) k) ≤ y'
[PROOFSTEP]
exact @Finset.le_max' ℤ _ _ _ (Finset.mem_image.mpr ⟨k, Finset.mem_univ _, rfl⟩)
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
have : (y' : T) < y :=
  by
  rw [y'_def, ← Finset.max'_image (show Monotone (_ : ℤ → T) from fun x y h => Int.cast_le.mpr h)]
  apply (Finset.max'_lt_iff _ (him.image _)).mpr
  simp only [Finset.mem_image, exists_prop]
  rintro _ ⟨x, ⟨k, -, rfl⟩, rfl⟩
  exact hy k
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ ↑y' < y
[PROOFSTEP]
rw [y'_def, ← Finset.max'_image (show Monotone (_ : ℤ → T) from fun x y h => Int.cast_le.mpr h)]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ Finset.max' (Finset.image (fun x => ↑x) (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)) ?h < y
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ Finset.Nonempty (Finset.image (fun x => ↑x) (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ))
[PROOFSTEP]
apply (Finset.max'_lt_iff _ (him.image _)).mpr
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ ∀ (y_1 : T), y_1 ∈ Finset.image (fun x => ↑x) (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) → y_1 < y
[PROOFSTEP]
simp only [Finset.mem_image, exists_prop]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
⊢ ∀ (y_1 : T), (∃ a_1, (∃ a_2, a_2 ∈ Finset.univ ∧ ↑abv (↑(↑bS.repr a) a_2) = a_1) ∧ ↑a_1 = y_1) → y_1 < y
[PROOFSTEP]
rintro _ ⟨x, ⟨k, -, rfl⟩, rfl⟩
[GOAL]
case intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
k : ι
⊢ ↑(↑abv (↑(↑bS.repr a) k)) < y
[PROOFSTEP]
exact hy k
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
have y'_nonneg : 0 ≤ y' := le_trans (abv.nonneg _) (hy' i)
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ ↑(↑abv (↑(Algebra.norm R) a)) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
apply (Int.cast_le.mpr (norm_le abv bS a hy')).trans_lt
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ ↑(normBound abv bS * y' ^ Fintype.card ι) < ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
simp only [Int.cast_mul, Int.cast_pow]
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ ↑(normBound abv bS) *
      ↑(Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him) ^ Fintype.card ι <
    ↑(normBound abv bS) * y ^ Fintype.card ι
[PROOFSTEP]
apply mul_lt_mul' le_rfl
[GOAL]
case intro.hbd
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ ↑(Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him) ^ Fintype.card ι < y ^ Fintype.card ι
[PROOFSTEP]
exact pow_lt_pow_of_lt_left this (Int.cast_nonneg.mpr y'_nonneg) (Fintype.card_pos_iff.mpr ⟨i⟩)
[GOAL]
case intro.hb
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ 0 ≤ ↑(Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him) ^ Fintype.card ι
[PROOFSTEP]
exact pow_nonneg (Int.cast_nonneg.mpr y'_nonneg) _
[GOAL]
case intro.hc
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁵ : EuclideanDomain R
inst✝¹⁴ : CommRing S
inst✝¹³ : IsDomain S
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra R K
inst✝⁹ : IsFractionRing R K
inst✝⁸ : Algebra K L
inst✝⁷ : FiniteDimensional K L
inst✝⁶ : IsSeparable K L
algRL : Algebra R L
inst✝⁵ : IsScalarTower R K L
inst✝⁴ : Algebra R S
inst✝³ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
bS : Basis ι R S
T : Type u_6
inst✝ : LinearOrderedRing T
a : S
y : T
hy : ∀ (k : ι), ↑(↑abv (↑(↑bS.repr a) k)) < y
i : ι
him : Finset.Nonempty (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ)
y' : ℤ := Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
y'_def : y' = Finset.max' (Finset.image (fun k => ↑abv (↑(↑bS.repr a) k)) Finset.univ) him
hy' : ∀ (k : ι), ↑abv (↑(↑bS.repr a) k) ≤ y'
this : ↑y' < y
y'_nonneg : 0 ≤ y'
⊢ 0 < ↑(normBound abv bS)
[PROOFSTEP]
exact Int.cast_pos.mpr (normBound_pos abv bS)
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
[PROOFSTEP]
classical
obtain ⟨_, ⟨b, b_mem, b_ne_zero, rfl⟩, min⟩ :=
  @Int.exists_least_of_bdd (fun a => ∃ b ∈ (I : Ideal S), b ≠ (0 : S) ∧ abv (Algebra.norm R b) = a) _
    (by
      use 0
      rintro _ ⟨b, _, _, rfl⟩
      apply abv.nonneg)
    (by
      obtain ⟨b, b_mem, b_ne_zero⟩ := (I : Ideal S).ne_bot_iff.mp (nonZeroDivisors.coe_ne_zero I)
      exact ⟨_, ⟨b, b_mem, b_ne_zero, rfl⟩⟩)
· refine' ⟨b, b_mem, b_ne_zero, _⟩
  intro c hc lt
  contrapose! lt with c_ne_zero
  exact min _ ⟨c, hc, c_ne_zero, rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
[PROOFSTEP]
obtain ⟨_, ⟨b, b_mem, b_ne_zero, rfl⟩, min⟩ :=
  @Int.exists_least_of_bdd (fun a => ∃ b ∈ (I : Ideal S), b ≠ (0 : S) ∧ abv (Algebra.norm R b) = a) _
    (by
      use 0
      rintro _ ⟨b, _, _, rfl⟩
      apply abv.nonneg)
    (by
      obtain ⟨b, b_mem, b_ne_zero⟩ := (I : Ideal S).ne_bot_iff.mp (nonZeroDivisors.coe_ne_zero I)
      exact ⟨_, ⟨b, b_mem, b_ne_zero, rfl⟩⟩)
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∃ b, ∀ (z : ℤ), (fun a => ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = a) z → b ≤ z
[PROOFSTEP]
use 0
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∀ (z : ℤ), (fun a => ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = a) z → 0 ≤ z
[PROOFSTEP]
rintro _ ⟨b, _, _, rfl⟩
[GOAL]
case h.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
left✝¹ : b ∈ ↑I
left✝ : b ≠ 0
⊢ 0 ≤ ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
apply abv.nonneg
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∃ z, (fun a => ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = a) z
[PROOFSTEP]
obtain ⟨b, b_mem, b_ne_zero⟩ := (I : Ideal S).ne_bot_iff.mp (nonZeroDivisors.coe_ne_zero I)
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
⊢ ∃ z, (fun a => ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = a) z
[PROOFSTEP]
exact ⟨_, ⟨b, b_mem, b_ne_zero, rfl⟩⟩
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
min : ∀ (z : ℤ), (∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = z) → ↑abv (↑(Algebra.norm R) b) ≤ z
⊢ ∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
[PROOFSTEP]
refine' ⟨b, b_mem, b_ne_zero, _⟩
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
min : ∀ (z : ℤ), (∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = z) → ↑abv (↑(Algebra.norm R) b) ≤ z
⊢ ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
[PROOFSTEP]
intro c hc lt
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
min : ∀ (z : ℤ), (∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = z) → ↑abv (↑(Algebra.norm R) b) ≤ z
c : S
hc : c ∈ ↑I
lt : ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b)
⊢ c = 0
[PROOFSTEP]
contrapose! lt with c_ne_zero
[GOAL]
case intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁴ : EuclideanDomain R
inst✝¹³ : CommRing S
inst✝¹² : IsDomain S
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Algebra R K
inst✝⁸ : IsFractionRing R K
inst✝⁷ : Algebra K L
inst✝⁶ : FiniteDimensional K L
inst✝⁵ : IsSeparable K L
algRL : Algebra R L
inst✝⁴ : IsScalarTower R K L
inst✝³ : Algebra R S
inst✝² : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
bS : Basis ι R S
I : { x // x ∈ (Ideal S)⁰ }
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
min : ∀ (z : ℤ), (∃ b, b ∈ ↑I ∧ b ≠ 0 ∧ ↑abv (↑(Algebra.norm R) b) = z) → ↑abv (↑(Algebra.norm R) b) ≤ z
c : S
hc : c ∈ ↑I
c_ne_zero : c ≠ 0
⊢ ↑abv (↑(Algebra.norm R) b) ≤ ↑abv (↑(Algebra.norm R) c)
[PROOFSTEP]
exact min _ ⟨c, hc, c_ne_zero, rfl⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
x : R
⊢ x ∈ finsetApprox bS adm ↔ ∃ i j, i ≠ j ∧ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j = x
[PROOFSTEP]
simp only [finsetApprox, Finset.mem_erase, Finset.mem_image]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
x : R
⊢ (x ≠ 0 ∧ ∃ a, a ∈ Finset.univ ∧ ↑(distinctElems bS adm) a.fst - ↑(distinctElems bS adm) a.snd = x) ↔
    ∃ i j, i ≠ j ∧ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j = x
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
x : R
⊢ (x ≠ 0 ∧ ∃ a, a ∈ Finset.univ ∧ ↑(distinctElems bS adm) a.fst - ↑(distinctElems bS adm) a.snd = x) →
    ∃ i j, i ≠ j ∧ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j = x
[PROOFSTEP]
rintro ⟨hx, ⟨i, j⟩, _, rfl⟩
[GOAL]
case mp.intro.intro.mk.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i j : Fin (Nat.succ (cardM bS adm))
left✝ : (i, j) ∈ Finset.univ
hx : ↑(distinctElems bS adm) (i, j).fst - ↑(distinctElems bS adm) (i, j).snd ≠ 0
⊢ ∃ i_1 j_1,
    i_1 ≠ j_1 ∧
      ↑(distinctElems bS adm) i_1 - ↑(distinctElems bS adm) j_1 =
        ↑(distinctElems bS adm) (i, j).fst - ↑(distinctElems bS adm) (i, j).snd
[PROOFSTEP]
refine' ⟨i, j, _, rfl⟩
[GOAL]
case mp.intro.intro.mk.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i j : Fin (Nat.succ (cardM bS adm))
left✝ : (i, j) ∈ Finset.univ
hx : ↑(distinctElems bS adm) (i, j).fst - ↑(distinctElems bS adm) (i, j).snd ≠ 0
⊢ i ≠ j
[PROOFSTEP]
rintro rfl
[GOAL]
case mp.intro.intro.mk.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i : Fin (Nat.succ (cardM bS adm))
left✝ : (i, i) ∈ Finset.univ
hx : ↑(distinctElems bS adm) (i, i).fst - ↑(distinctElems bS adm) (i, i).snd ≠ 0
⊢ False
[PROOFSTEP]
simp at hx 
[GOAL]
case mpr
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
x : R
⊢ (∃ i j, i ≠ j ∧ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j = x) →
    x ≠ 0 ∧ ∃ a, a ∈ Finset.univ ∧ ↑(distinctElems bS adm) a.fst - ↑(distinctElems bS adm) a.snd = x
[PROOFSTEP]
rintro ⟨i, j, hij, rfl⟩
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i j : Fin (Nat.succ (cardM bS adm))
hij : i ≠ j
⊢ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j ≠ 0 ∧
    ∃ a,
      a ∈ Finset.univ ∧
        ↑(distinctElems bS adm) a.fst - ↑(distinctElems bS adm) a.snd =
          ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j
[PROOFSTEP]
refine' ⟨_, ⟨i, j⟩, Finset.mem_univ _, rfl⟩
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i j : Fin (Nat.succ (cardM bS adm))
hij : i ≠ j
⊢ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j ≠ 0
[PROOFSTEP]
rw [Ne.def, sub_eq_zero]
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
i j : Fin (Nat.succ (cardM bS adm))
hij : i ≠ j
⊢ ¬↑(distinctElems bS adm) i = ↑(distinctElems bS adm) j
[PROOFSTEP]
exact fun h => hij ((distinctElems bS adm).injective h)
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have dim_pos := Fintype.card_pos_iff.mpr bS.index_nonempty
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
set ε : ℝ := normBound abv bS ^ (-1 / Fintype.card ι : ℝ) with ε_eq
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have hε : 0 < ε := Real.rpow_pos_of_pos (Int.cast_pos.mpr (normBound_pos abv bS)) _
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have ε_le : (normBound abv bS : ℝ) * (abv b • ε) ^ Fintype.card ι ≤ abv b ^ Fintype.card ι :=
  by
  have := normBound_pos abv bS
  have := abv.nonneg b
  rw [ε_eq, Algebra.smul_def, eq_intCast, mul_rpow, ← rpow_mul, div_mul_cancel, rpow_neg_one, mul_left_comm,
      mul_inv_cancel, mul_one, rpow_nat_cast] <;>
    try norm_cast; linarith
  · exact Iff.mpr Int.cast_nonneg this
  · linarith
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
⊢ ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
[PROOFSTEP]
have := normBound_pos abv bS
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this : 0 < normBound abv bS
⊢ ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
[PROOFSTEP]
have := abv.nonneg b
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
[PROOFSTEP]
rw [ε_eq, Algebra.smul_def, eq_intCast, mul_rpow, ← rpow_mul, div_mul_cancel, rpow_neg_one, mul_left_comm,
  mul_inv_cancel, mul_one, rpow_nat_cast]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ↑(normBound abv bS) ≠ 0
[PROOFSTEP]
try norm_cast; linarith
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ↑(normBound abv bS) ≠ 0
[PROOFSTEP]
norm_cast
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ¬normBound abv bS = 0
[PROOFSTEP]
linarith
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ↑(Fintype.card ι) ≠ 0
[PROOFSTEP]
try norm_cast; linarith
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ↑(Fintype.card ι) ≠ 0
[PROOFSTEP]
norm_cast
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ ¬Fintype.card ι = 0
[PROOFSTEP]
linarith
[GOAL]
case hx
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS)
[PROOFSTEP]
try norm_cast; linarith
[GOAL]
case hx
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS)
[PROOFSTEP]
norm_cast
[GOAL]
case hx
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ normBound abv bS
[PROOFSTEP]
linarith
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(↑abv b)
[PROOFSTEP]
try norm_cast; linarith
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(↑abv b)
[PROOFSTEP]
norm_cast
[GOAL]

[PROOFSTEP]
linarith
[GOAL]
case h₁
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
[PROOFSTEP]
try norm_cast; linarith
[GOAL]
case h₁
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
[PROOFSTEP]
norm_cast
[GOAL]
case h₁
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS) ^ ↑(Rat.divInt (Int.negSucc 0) ↑(Fintype.card ι))
[PROOFSTEP]
linarith
[GOAL]
case h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(↑abv b)
[PROOFSTEP]
exact Iff.mpr Int.cast_nonneg this
[GOAL]
case h₁
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
this✝ : 0 < normBound abv bS
this : 0 ≤ ↑abv b
⊢ 0 ≤ ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
[PROOFSTEP]
linarith
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
set μ : Fin (cardM bS adm).succ ↪ R := distinctElems bS adm with hμ
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
let s : ι →₀ R := bS.repr a
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have s_eq : ∀ i, s i = bS.repr a i := fun i => rfl
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
let qs : Fin (cardM bS adm).succ → ι → R := fun j i => μ j * s i / b
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
let rs : Fin (cardM bS adm).succ → ι → R := fun j i => μ j * s i % b
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have r_eq : ∀ j i, rs j i = μ j * s i % b := fun i j => rfl
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have μ_eq : ∀ i j, μ j * s i = b * qs j i + rs j i := by
  intro i j
  rw [r_eq, EuclideanDomain.div_add_mod]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
⊢ ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
[PROOFSTEP]
intro i j
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
i : ι
j : Fin (Nat.succ (cardM bS adm))
⊢ ↑μ j * ↑s i = b * qs j i + rs j i
[PROOFSTEP]
rw [r_eq, EuclideanDomain.div_add_mod]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have μ_mul_a_eq : ∀ j, μ j • a = b • ∑ i, qs j i • bS i + ∑ i, rs j i • bS i :=
  by
  intro j
  rw [← bS.sum_repr a]
  simp only [Finset.smul_sum, ← Finset.sum_add_distrib]
  refine'
    Finset.sum_congr rfl fun i _ =>
      _
        -- Porting note `← hμ, ← r_eq` and the final `← μ_eq` were not needed.
  rw [← hμ, ← r_eq, ← s_eq, ← mul_smul, μ_eq, add_smul, mul_smul, ← μ_eq]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
⊢ ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
[PROOFSTEP]
intro j
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
j : Fin (Nat.succ (cardM bS adm))
⊢ ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
[PROOFSTEP]
rw [← bS.sum_repr a]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
j : Fin (Nat.succ (cardM bS adm))
⊢ ↑μ j • ∑ i : ι, ↑(↑bS.repr a) i • ↑bS i = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
[PROOFSTEP]
simp only [Finset.smul_sum, ← Finset.sum_add_distrib]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
j : Fin (Nat.succ (cardM bS adm))
⊢ ∑ x : ι, ↑(distinctElems bS adm) j • ↑(↑bS.repr a) x • ↑bS x =
    ∑ x : ι,
      (b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x / b) • ↑bS x +
        (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x % b) • ↑bS x)
[PROOFSTEP]
refine'
  Finset.sum_congr rfl fun i _ =>
    _
      -- Porting note `← hμ, ← r_eq` and the final `← μ_eq` were not needed.
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
j : Fin (Nat.succ (cardM bS adm))
i : ι
x✝ : i ∈ Finset.univ
⊢ ↑(distinctElems bS adm) j • ↑(↑bS.repr a) i • ↑bS i =
    b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) i / b) • ↑bS i +
      (↑(distinctElems bS adm) j * ↑(↑bS.repr a) i % b) • ↑bS i
[PROOFSTEP]
rw [← hμ, ← r_eq, ← s_eq, ← mul_smul, μ_eq, add_smul, mul_smul, ← μ_eq]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
obtain ⟨j, k, j_ne_k, hjk⟩ := adm.exists_approx hε hb fun j i => μ j * s i
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have hjk' : ∀ i, (abv (rs k i - rs j i) : ℝ) < abv b • ε := by simpa only [r_eq] using hjk
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
⊢ ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
[PROOFSTEP]
simpa only [r_eq] using hjk
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
let q := ∑ i, (qs k i - qs j i) • bS i
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
set r := μ k - μ j with r_eq
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
⊢ ∃ q r,
    r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
refine' ⟨q, r, (mem_finsetApprox bS adm).mpr _, _⟩
[GOAL]
case intro.intro.intro.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
⊢ ∃ i j, i ≠ j ∧ ↑(distinctElems bS adm) i - ↑(distinctElems bS adm) j = r
[PROOFSTEP]
exact ⟨k, j, j_ne_k.symm, rfl⟩
[GOAL]
case intro.intro.intro.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
⊢ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
have : r • a - b • q = ∑ x : ι, (rs k x • bS x - rs j x • bS x) :=
  by
  simp only [r_eq, sub_smul, μ_mul_a_eq, Finset.smul_sum, ← Finset.sum_add_distrib, ← Finset.sum_sub_distrib, smul_sub]
  refine' Finset.sum_congr rfl fun x _ => _
  ring
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
⊢ r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
[PROOFSTEP]
simp only [r_eq, sub_smul, μ_mul_a_eq, Finset.smul_sum, ← Finset.sum_add_distrib, ← Finset.sum_sub_distrib, smul_sub]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
⊢ ∑ x : ι,
      (b • (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x / b) • ↑bS x +
            (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x % b) • ↑bS x -
          (b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x / b) • ↑bS x +
            (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x % b) • ↑bS x) -
        (b • (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x / b) • ↑bS x -
          b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x / b) • ↑bS x)) =
    ∑ x : ι,
      ((↑(distinctElems bS adm) k * ↑(↑bS.repr a) x % b) • ↑bS x -
        (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x % b) • ↑bS x)
[PROOFSTEP]
refine' Finset.sum_congr rfl fun x _ => _
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
x : ι
x✝ : x ∈ Finset.univ
⊢ b • (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x / b) • ↑bS x +
          (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x % b) • ↑bS x -
        (b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x / b) • ↑bS x +
          (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x % b) • ↑bS x) -
      (b • (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x / b) • ↑bS x -
        b • (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x / b) • ↑bS x) =
    (↑(distinctElems bS adm) k * ↑(↑bS.repr a) x % b) • ↑bS x -
      (↑(distinctElems bS adm) j * ↑(↑bS.repr a) x % b) • ↑bS x
[PROOFSTEP]
ring
[GOAL]
case intro.intro.intro.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
⊢ ↑abv (↑(Algebra.norm R) (r • a - b • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b))
[PROOFSTEP]
rw [this, Algebra.norm_algebraMap_of_basis bS, abv.map_pow]
[GOAL]
case intro.intro.intro.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
⊢ ↑abv (↑(Algebra.norm R) (∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x))) < ↑abv b ^ Fintype.card ι
[PROOFSTEP]
refine' Int.cast_lt.mp ((norm_lt abv bS _ fun i => lt_of_le_of_lt _ (hjk' i)).trans_le _)
[GOAL]
case intro.intro.intro.refine'_2.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
i : ι
⊢ ↑(↑abv (↑(↑bS.repr (∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x))) i)) ≤ ↑(↑abv (rs k i - rs j i))
[PROOFSTEP]
apply le_of_eq
[GOAL]
case intro.intro.intro.refine'_2.refine'_1.a
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
i : ι
⊢ ↑(↑abv (↑(↑bS.repr (∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x))) i)) = ↑(↑abv (rs k i - rs j i))
[PROOFSTEP]
congr
[GOAL]
case intro.intro.intro.refine'_2.refine'_1.a.e_a.h.e_6.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
i : ι
⊢ ↑(↑bS.repr (∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x))) i = rs k i - rs j i
[PROOFSTEP]
simp_rw [LinearEquiv.map_sum, LinearEquiv.map_sub, LinearEquiv.map_smul, Finset.sum_apply', Finsupp.sub_apply,
  Finsupp.smul_apply, Finset.sum_sub_distrib, Basis.repr_self_apply, smul_eq_mul, mul_boole, Finset.sum_ite_eq',
  Finset.mem_univ, if_true]
[GOAL]
case intro.intro.intro.refine'_2.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
a : S
b : R
hb : b ≠ 0
dim_pos : 0 < Fintype.card ι
ε : ℝ := ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
ε_eq : ε = ↑(normBound abv bS) ^ (-1 / ↑(Fintype.card ι))
hε : 0 < ε
ε_le : ↑(normBound abv bS) * (↑abv b • ε) ^ ↑(Fintype.card ι) ≤ ↑(↑abv b) ^ ↑(Fintype.card ι)
μ : Fin (Nat.succ (cardM bS adm)) ↪ R := distinctElems bS adm
hμ : μ = distinctElems bS adm
s : ι →₀ R := ↑bS.repr a
s_eq : ∀ (i : ι), ↑s i = ↑(↑bS.repr a) i
qs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i / b
rs : Fin (Nat.succ (cardM bS adm)) → ι → R := fun j i => ↑μ j * ↑s i % b
r_eq✝ : ∀ (j : Fin (Nat.succ (cardM bS adm))) (i : ι), rs j i = ↑μ j * ↑s i % b
μ_eq : ∀ (i : ι) (j : Fin (Nat.succ (cardM bS adm))), ↑μ j * ↑s i = b * qs j i + rs j i
μ_mul_a_eq : ∀ (j : Fin (Nat.succ (cardM bS adm))), ↑μ j • a = b • ∑ i : ι, qs j i • ↑bS i + ∑ i : ι, rs j i • ↑bS i
j k : Fin (Nat.succ (AbsoluteValue.IsAdmissible.card adm ε ^ Fintype.card ι))
j_ne_k : j ≠ k
hjk : ∀ (k_1 : ι), ↑(↑abv (↑μ k * ↑s k_1 % b - ↑μ j * ↑s k_1 % b)) < ↑abv b • ε
hjk' : ∀ (i : ι), ↑(↑abv (rs k i - rs j i)) < ↑abv b • ε
q : S := ∑ i : ι, (qs k i - qs j i) • ↑bS i
r : R := ↑μ k - ↑μ j
r_eq : r = ↑μ k - ↑μ j
this : r • a - b • q = ∑ x : ι, (rs k x • ↑bS x - rs j x • ↑bS x)
⊢ ↑(normBound abv bS) * (↑abv b • ε) ^ Fintype.card ι ≤ ↑(↑abv b ^ Fintype.card ι)
[PROOFSTEP]
exact_mod_cast ε_le
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
⊢ ∃ q r, r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
have inj : Function.Injective (algebraMap R L) :=
  by
  rw [IsScalarTower.algebraMap_eq R S L]
  exact (IsIntegralClosure.algebraMap_injective S R L).comp bS.algebraMap_injective
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
⊢ Function.Injective ↑(algebraMap R L)
[PROOFSTEP]
rw [IsScalarTower.algebraMap_eq R S L]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
⊢ Function.Injective ↑(RingHom.comp (algebraMap S L) (algebraMap R S))
[PROOFSTEP]
exact (IsIntegralClosure.algebraMap_injective S R L).comp bS.algebraMap_injective
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
⊢ ∃ q r, r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
obtain ⟨a', b', hb', h⟩ := IsIntegralClosure.exists_smul_eq_mul h inj a hb
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h✝ : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
a' : S
b' : R
hb' : b' ≠ 0
h : b' • a = b * a'
⊢ ∃ q r, r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
obtain ⟨q, r, hr, hqr⟩ := exists_mem_finsetApprox bS adm a' hb'
[GOAL]
case intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h✝ : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
a' : S
b' : R
hb' : b' ≠ 0
h : b' • a = b * a'
q : S
r : R
hr : r ∈ finsetApprox bS adm
hqr : ↑abv (↑(Algebra.norm R) (r • a' - b' • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b'))
⊢ ∃ q r, r ∈ finsetApprox bS adm ∧ ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
refine' ⟨q, r, hr, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h✝ : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
a' : S
b' : R
hb' : b' ≠ 0
h : b' • a = b * a'
q : S
r : R
hr : r ∈ finsetApprox bS adm
hqr : ↑abv (↑(Algebra.norm R) (r • a' - b' • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b'))
⊢ ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
refine' lt_of_mul_lt_mul_left _ (show 0 ≤ abv (Algebra.norm R (algebraMap R S b')) from abv.nonneg _)
[GOAL]
case intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h✝ : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
a' : S
b' : R
hb' : b' ≠ 0
h : b' • a = b * a'
q : S
r : R
hr : r ∈ finsetApprox bS adm
hqr : ↑abv (↑(Algebra.norm R) (r • a' - b' • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b'))
⊢ ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b')) * ↑abv (↑(Algebra.norm R) (r • a - q * b)) <
    ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b')) * ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
refine'
  lt_of_le_of_lt (le_of_eq _)
    (mul_lt_mul hqr le_rfl (abv.pos ((Algebra.norm_ne_zero_iff_of_basis bS).mpr hb)) (abv.nonneg _))
[GOAL]
case intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
h✝ : Algebra.IsAlgebraic R L
a b : S
hb : b ≠ 0
inj : Function.Injective ↑(algebraMap R L)
a' : S
b' : R
hb' : b' ≠ 0
h : b' • a = b * a'
q : S
r : R
hr : r ∈ finsetApprox bS adm
hqr : ↑abv (↑(Algebra.norm R) (r • a' - b' • q)) < ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b'))
⊢ ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) b')) * ↑abv (↑(Algebra.norm R) (r • a - q * b)) =
    ↑abv (↑(Algebra.norm R) (r • a' - b' • q)) * ↑abv (↑(Algebra.norm R) b)
[PROOFSTEP]
rw [← abv.map_mul, ← MonoidHom.map_mul, ← abv.map_mul, ← MonoidHom.map_mul, ← Algebra.smul_def, smul_sub b', sub_mul,
  smul_comm, h, mul_comm b a', Algebra.smul_mul_assoc r a' b, Algebra.smul_mul_assoc b' q b]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
⊢ ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ≠ 0
[PROOFSTEP]
refine' mt ((injective_iff_map_eq_zero _).mp bS.algebraMap_injective _) _
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
⊢ ¬∏ m in finsetApprox bS adm, m = 0
[PROOFSTEP]
simp only [Finset.prod_eq_zero_iff, not_exists]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
⊢ ∀ (x : R), ¬(x ∈ finsetApprox bS adm ∧ x = 0)
[PROOFSTEP]
rintro x ⟨hx, rfl⟩
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
hx : 0 ∈ finsetApprox bS adm
⊢ False
[PROOFSTEP]
exact finsetApprox.zero_not_mem bS adm hx
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ∈ ↑J
[PROOFSTEP]
set M := ∏ m in finsetApprox bS adm, m
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) M ∈ ↑J
[PROOFSTEP]
have hM : algebraMap R S M ≠ 0 := prod_finsetApprox_ne_zero bS adm
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) M ∈ ↑J
[PROOFSTEP]
obtain ⟨b, b_mem, b_ne_zero, b_min⟩ := exists_min abv I
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) M ∈ ↑J
[PROOFSTEP]
suffices Ideal.span { b } ∣ Ideal.span {algebraMap _ _ M} * I.1
  by
  obtain ⟨J, hJ⟩ := this
  refine' ⟨⟨J, _⟩, _, _⟩
  · rw [mem_nonZeroDivisors_iff_ne_zero]
    rintro rfl
    rw [Ideal.zero_eq_bot, Ideal.mul_bot] at hJ 
    exact hM (Ideal.span_singleton_eq_bot.mp (I.2 _ hJ))
  · rw [ClassGroup.mk0_eq_mk0_iff]
    exact ⟨algebraMap _ _ M, b, hM, b_ne_zero, hJ⟩
  rw [← SetLike.mem_coe, ← Set.singleton_subset_iff, ← Ideal.span_le, ← Ideal.dvd_iff_le]
  refine' (mul_dvd_mul_iff_left _).mp _
  swap; · exact mt Ideal.span_singleton_eq_bot.mp b_ne_zero
  rw [Subtype.coe_mk, Ideal.dvd_iff_le, ← hJ, mul_comm]
  apply Ideal.mul_mono le_rfl
  rw [Ideal.span_le, Set.singleton_subset_iff]
  exact b_mem
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
this : Ideal.span {b} ∣ Ideal.span {↑(algebraMap R S) M} * ↑I
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) M ∈ ↑J
[PROOFSTEP]
obtain ⟨J, hJ⟩ := this
[GOAL]
case intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ∃ J, ↑mk0 I = ↑mk0 J ∧ ↑(algebraMap R S) M ∈ ↑J
[PROOFSTEP]
refine' ⟨⟨J, _⟩, _, _⟩
[GOAL]
case intro.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ J ∈ (Ideal S)⁰
[PROOFSTEP]
rw [mem_nonZeroDivisors_iff_ne_zero]
[GOAL]
case intro.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ J ≠ 0
[PROOFSTEP]
rintro rfl
[GOAL]
case intro.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * 0
⊢ False
[PROOFSTEP]
rw [Ideal.zero_eq_bot, Ideal.mul_bot] at hJ 
[GOAL]
case intro.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = ⊥
⊢ False
[PROOFSTEP]
exact hM (Ideal.span_singleton_eq_bot.mp (I.2 _ hJ))
[GOAL]
case intro.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ↑mk0 I = ↑mk0 { val := J, property := (_ : J ∈ (Ideal S)⁰) }
[PROOFSTEP]
rw [ClassGroup.mk0_eq_mk0_iff]
[GOAL]
case intro.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ∃ x y _hx _hy, Ideal.span {x} * ↑I = Ideal.span {y} * ↑{ val := J, property := (_ : J ∈ (Ideal S)⁰) }
[PROOFSTEP]
exact ⟨algebraMap _ _ M, b, hM, b_ne_zero, hJ⟩
[GOAL]
case intro.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ↑(algebraMap R S) M ∈ ↑{ val := J, property := (_ : J ∈ (Ideal S)⁰) }
[PROOFSTEP]
rw [← SetLike.mem_coe, ← Set.singleton_subset_iff, ← Ideal.span_le, ← Ideal.dvd_iff_le]
[GOAL]
case intro.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ↑{ val := J, property := (_ : J ∈ (Ideal S)⁰) } ∣ Ideal.span {↑(algebraMap R S) M}
[PROOFSTEP]
refine' (mul_dvd_mul_iff_left _).mp _
[GOAL]
case intro.refine'_3.refine'_1
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ Ideal ((fun x => S) M)
case intro.refine'_3.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ?intro.refine'_3.refine'_1 ≠ 0
case intro.refine'_3.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ?intro.refine'_3.refine'_1 * ↑{ val := J, property := (_ : J ∈ (Ideal S)⁰) } ∣
    ?intro.refine'_3.refine'_1 * Ideal.span {↑(algebraMap R S) M}
[PROOFSTEP]
swap
[GOAL]
case intro.refine'_3.refine'_2
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ ?intro.refine'_3.refine'_1 ≠ 0
[PROOFSTEP]
exact mt Ideal.span_singleton_eq_bot.mp b_ne_zero
[GOAL]
case intro.refine'_3.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ Ideal.span {b} * ↑{ val := J, property := (_ : J ∈ (Ideal S)⁰) } ∣ Ideal.span {b} * Ideal.span {↑(algebraMap R S) M}
[PROOFSTEP]
rw [Subtype.coe_mk, Ideal.dvd_iff_le, ← hJ, mul_comm]
[GOAL]
case intro.refine'_3.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ Ideal.span {↑(algebraMap R S) M} * Ideal.span {b} ≤ Ideal.span {↑(algebraMap R S) M} * ↑I
[PROOFSTEP]
apply Ideal.mul_mono le_rfl
[GOAL]
case intro.refine'_3.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ Ideal.span {b} ≤ ↑I
[PROOFSTEP]
rw [Ideal.span_le, Set.singleton_subset_iff]
[GOAL]
case intro.refine'_3.refine'_3
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
J : Ideal S
hJ : Ideal.span {↑(algebraMap R S) M} * ↑I = Ideal.span {b} * J
⊢ b ∈ ↑↑I
[PROOFSTEP]
exact b_mem
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
⊢ Ideal.span {b} ∣ Ideal.span {↑(algebraMap R S) M} * ↑I
[PROOFSTEP]
rw [Ideal.dvd_iff_le, Ideal.mul_le]
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
⊢ ∀ (r : (fun x => S) M), r ∈ Ideal.span {↑(algebraMap R S) M} → ∀ (s : (fun x => S) M), s ∈ ↑I → r * s ∈ Ideal.span {b}
[PROOFSTEP]
intro r' hr' a ha
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : r' ∈ Ideal.span {↑(algebraMap R S) M}
a : S
ha : a ∈ ↑I
⊢ r' * a ∈ Ideal.span {b}
[PROOFSTEP]
rw [Ideal.mem_span_singleton] at hr' ⊢
[GOAL]
case intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
⊢ b ∣ r' * a
[PROOFSTEP]
obtain ⟨q, r, r_mem, lt⟩ := exists_mem_finset_approx' L bS adm h a b_ne_zero
[GOAL]
case intro.intro.intro.intro.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
q : S
r : R
r_mem : r ∈ finsetApprox bS adm
lt : ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
⊢ b ∣ r' * a
[PROOFSTEP]
apply @dvd_of_mul_left_dvd _ _ q
[GOAL]
case intro.intro.intro.intro.intro.intro.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
q : S
r : R
r_mem : r ∈ finsetApprox bS adm
lt : ↑abv (↑(Algebra.norm R) (r • a - q * b)) < ↑abv (↑(Algebra.norm R) b)
⊢ q * b ∣ r' * a
[PROOFSTEP]
simp only [Algebra.smul_def] at lt 
[GOAL]
case intro.intro.intro.intro.intro.intro.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
q : S
r : R
r_mem : r ∈ finsetApprox bS adm
lt : ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) r * a - q * b)) < ↑abv (↑(Algebra.norm R) b)
⊢ q * b ∣ r' * a
[PROOFSTEP]
rw [← sub_eq_zero.mp (b_min _ (I.1.sub_mem (I.1.mul_mem_left _ ha) (I.1.mul_mem_left _ b_mem)) lt)]
[GOAL]
case intro.intro.intro.intro.intro.intro.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
q : S
r : R
r_mem : r ∈ finsetApprox bS adm
lt : ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) r * a - q * b)) < ↑abv (↑(Algebra.norm R) b)
⊢ ↑(algebraMap R S) r * a ∣ r' * a
[PROOFSTEP]
refine' mul_dvd_mul_right (dvd_trans (RingHom.map_dvd _ _) hr') _
[GOAL]
case intro.intro.intro.intro.intro.intro.h
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : { x // x ∈ (Ideal S)⁰ }
M : R := ∏ m in finsetApprox bS adm, m
hM : ↑(algebraMap R S) M ≠ 0
b : S
b_mem : b ∈ ↑I
b_ne_zero : b ≠ 0
b_min : ∀ (c : S), c ∈ ↑I → ↑abv (↑(Algebra.norm R) c) < ↑abv (↑(Algebra.norm R) b) → c = 0
r' : S
hr' : ↑(algebraMap R S) M ∣ r'
a : S
ha : a ∈ ↑I
q : S
r : R
r_mem : r ∈ finsetApprox bS adm
lt : ↑abv (↑(Algebra.norm R) (↑(algebraMap R S) r * a - q * b)) < ↑abv (↑(Algebra.norm R) b)
⊢ r ∣ M
[PROOFSTEP]
exact Multiset.dvd_prod (Multiset.mem_map.mpr ⟨_, r_mem, rfl⟩)
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
⊢ Function.Surjective (mkMMem bS adm)
[PROOFSTEP]
intro I'
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I' : ClassGroup S
⊢ ∃ a, mkMMem bS adm a = I'
[PROOFSTEP]
obtain ⟨⟨I, hI⟩, rfl⟩ := ClassGroup.mk0_surjective I'
[GOAL]
case intro.mk
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : Ideal S
hI : I ∈ (Ideal S)⁰
⊢ ∃ a, mkMMem bS adm a = ↑mk0 { val := I, property := hI }
[PROOFSTEP]
obtain ⟨J, mk0_eq_mk0, J_dvd⟩ := exists_mk0_eq_mk0 L bS adm h ⟨I, hI⟩
[GOAL]
case intro.mk.intro.intro
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : Ideal S
hI : I ∈ (Ideal S)⁰
J : { x // x ∈ (Ideal S)⁰ }
mk0_eq_mk0 : ↑mk0 { val := I, property := hI } = ↑mk0 J
J_dvd : ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ∈ ↑J
⊢ ∃ a, mkMMem bS adm a = ↑mk0 { val := I, property := hI }
[PROOFSTEP]
exact ⟨⟨J, J_dvd⟩, mk0_eq_mk0.symm⟩
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
⊢ Ideal.span {↑(algebraMap R S) (∏ m in finsetApprox bS adm, m)} ≠ 0
[PROOFSTEP]
rw [Ne.def, Ideal.zero_eq_bot, Ideal.span_singleton_eq_bot]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
⊢ ¬↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) = 0
[PROOFSTEP]
exact prod_finsetApprox_ne_zero bS adm
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : Ideal S
⊢ Ideal.span {↑(algebraMap R S) (∏ m in finsetApprox bS adm, m)} ≤ I ↔
    ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ∈ ↑(Equiv.refl (Ideal S)) I
[PROOFSTEP]
rw [Equiv.refl_apply, Ideal.span_le, Set.singleton_subset_iff]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁷ : EuclideanDomain R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : IsDomain S
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra R K
inst✝¹¹ : IsFractionRing R K
inst✝¹⁰ : Algebra K L
inst✝⁹ : FiniteDimensional K L
inst✝⁸ : IsSeparable K L
algRL : Algebra R L
inst✝⁷ : IsScalarTower R K L
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝² : Infinite R
inst✝¹ : DecidableEq R
inst✝ : IsDedekindDomain S
h : Algebra.IsAlgebraic R L
I : Ideal S
⊢ ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ∈ ↑I ↔ ↑(algebraMap R S) (∏ m in finsetApprox bS adm, m) ∈ I
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
letI := Classical.decEq L
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this : DecidableEq L := Classical.decEq L
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
letI := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝ : DecidableEq L := Classical.decEq L
this : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
letI := IsIntegralClosure.isDedekindDomain R K L S
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝¹ : DecidableEq L := Classical.decEq L
this✝ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
choose s b hb_int using FiniteDimensional.exists_is_basis_integral R K L
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝¹ : DecidableEq L := Classical.decEq L
this✝ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b x)
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
have : LinearIndependent R ((Algebra.traceForm K L).dualBasis (traceForm_nondegenerate K L) b) :=
  by
  refine' (Basis.linearIndependent _).restrict_scalars _
  simp only [Algebra.smul_def, mul_one]
  apply IsFractionRing.injective
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝¹ : DecidableEq L := Classical.decEq L
this✝ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b x)
⊢ LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b)
[PROOFSTEP]
refine' (Basis.linearIndependent _).restrict_scalars _
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝¹ : DecidableEq L := Classical.decEq L
this✝ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b x)
⊢ Function.Injective fun r => r • 1
[PROOFSTEP]
simp only [Algebra.smul_def, mul_one]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝¹ : DecidableEq L := Classical.decEq L
this✝ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b x)
⊢ Function.Injective fun r => ↑(algebraMap R K) r
[PROOFSTEP]
apply IsFractionRing.injective
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b)
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
obtain ⟨n, b⟩ := Submodule.basisOfPidOfLESpan this (IsIntegralClosure.range_le_span_dualBasis S b hb_int)
[GOAL]
case mk
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
let f : (S ⧸ LinearMap.ker (LinearMap.restrictScalars R (Algebra.linearMap S L))) ≃ₗ[R] S :=
  by
  rw [LinearMap.ker_eq_bot.mpr]
  · exact Submodule.quotEquivOfEqBot _ rfl
  · exact IsIntegralClosure.algebraMap_injective _ R _
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
⊢ (S ⧸ LinearMap.ker (↑R (Algebra.linearMap S L))) ≃ₗ[R] S
[PROOFSTEP]
rw [LinearMap.ker_eq_bot.mpr]
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
⊢ (S ⧸ ⊥) ≃ₗ[R] S
[PROOFSTEP]
exact Submodule.quotEquivOfEqBot _ rfl
[GOAL]
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
⊢ Function.Injective ↑(↑R (Algebra.linearMap S L))
[PROOFSTEP]
exact IsIntegralClosure.algebraMap_injective _ R _
[GOAL]
case mk
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
f : (S ⧸ LinearMap.ker (↑R (Algebra.linearMap S L))) ≃ₗ[R] S :=
  Eq.mpr (_ : ((S ⧸ LinearMap.ker (↑R (Algebra.linearMap S L))) ≃ₗ[R] S) = ((S ⧸ ⊥) ≃ₗ[R] S))
    (Submodule.quotEquivOfEqBot ⊥ (_ : ⊥ = ⊥))
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
let bS := b.map ((LinearMap.quotKerEquivRange _).symm ≪≫ₗ f)
[GOAL]
case mk
R : Type u_1
S : Type u_2
K : Type u_3
L : Type u_4
inst✝¹⁶ : EuclideanDomain R
inst✝¹⁵ : CommRing S
inst✝¹⁴ : IsDomain S
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra R K
inst✝¹⁰ : IsFractionRing R K
inst✝⁹ : Algebra K L
inst✝⁸ : FiniteDimensional K L
inst✝⁷ : IsSeparable K L
algRL : Algebra R L
inst✝⁶ : IsScalarTower R K L
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra S L
ist : IsScalarTower R S L
iic : IsIntegralClosure S R L
abv : AbsoluteValue R ℤ
ι : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
bS✝ : Basis ι R S
adm : AbsoluteValue.IsAdmissible abv
inst✝¹ : Infinite R
inst✝ : DecidableEq R
this✝² : DecidableEq L := Classical.decEq L
this✝¹ : IsFractionRing S L := IsIntegralClosure.isFractionRing_of_finite_extension R K L S
this✝ : IsDedekindDomain S := IsIntegralClosure.isDedekindDomain R K L S
s : Finset L
b✝ : Basis { x // x ∈ s } K L
hb_int : ∀ (x : { x // x ∈ s }), IsIntegral R (↑b✝ x)
this :
  LinearIndependent R
    ↑(BilinForm.dualBasis (Algebra.traceForm K L) (_ : BilinForm.Nondegenerate (Algebra.traceForm K L)) b✝)
n : ℕ
b : Basis (Fin n) R { x // x ∈ LinearMap.range (↑R (Algebra.linearMap S L)) }
f : (S ⧸ LinearMap.ker (↑R (Algebra.linearMap S L))) ≃ₗ[R] S :=
  Eq.mpr (_ : ((S ⧸ LinearMap.ker (↑R (Algebra.linearMap S L))) ≃ₗ[R] S) = ((S ⧸ ⊥) ≃ₗ[R] S))
    (Submodule.quotEquivOfEqBot ⊥ (_ : ⊥ = ⊥))
bS : Basis (Fin n) R S :=
  Basis.map b (LinearEquiv.trans (LinearEquiv.symm (LinearMap.quotKerEquivRange (↑R (Algebra.linearMap S L)))) f)
⊢ Fintype (ClassGroup S)
[PROOFSTEP]
exact
  fintypeOfAdmissibleOfAlgebraic L bS adm
    (fun x => (IsFractionRing.isAlgebraic_iff R K L).mpr (Algebra.isAlgebraic_of_finite K _ x))
