Theorem: Ideal.finrank_quotient_map
File: Mathlib/NumberTheory/RamificationInertia.lean

Proof steps:
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: letI : Field (R ⧸ p) := Ideal.Quotient.field _
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: let ι := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: let b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis _ _
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: let b' : ι → S := fun i => (Ideal.Quotient.mk_surjective (b i)).choose
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: have b_eq_b' : ⇑b = (Submodule.mkQ (map (algebraMap R S) p)).restrictScalars R ∘ b' :=
    funext fun i => (Ideal.Quotient.mk_surjective (b i)).choose_spec.symm
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
b'' : ι → L := ⇑(algebraMap S L) ∘ b'
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
tactic: let b'' : ι → L := algebraMap S L ∘ b'
state_before: R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
b'' : ι → L := ⇑(algebraMap S L) ∘ b'
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: case refine_2
R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
b'' : ι → L := ⇑(algebraMap S L) ∘ b'
b''_li : LinearIndependent K b''
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L

case refine_1
R : Type u
inst✝²⁵ : CommRing R
S : Type v
inst✝²⁴ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
inst✝²³ : Algebra R S
K : Type u_1
inst✝²² : Field K
inst✝²¹ : Algebra R K
hRK : IsFractionRing R K
L : Type u_2
inst✝²⁰ : Field L
inst✝¹⁹ : Algebra S L
inst✝¹⁸ : IsFractionRing S L
V : Type u_3
V' : Type u_4
V'' : Type u_5
inst✝¹⁷ : AddCommGroup V
inst✝¹⁶ : Module R V
inst✝¹⁵ : Module K V
inst✝¹⁴ : IsScalarTower R K V
inst✝¹³ : AddCommGroup V'
inst✝¹² : Module R V'
inst✝¹¹ : Module S V'
inst✝¹⁰ : IsScalarTower R S V'
inst✝⁹ : AddCommGroup V''
inst✝⁸ : Module R V''
inst✝⁷ : IsDomain S
inst✝⁶ : IsDedekindDomain R
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra R L
inst✝³ : IsScalarTower R K L
inst✝² : IsScalarTower R S L
inst✝¹ : IsIntegralClosure S R L
hp : p.IsMaximal
inst✝ : IsNoetherian R S
this : Field (R ⧸ p) := Quotient.field p
ι : Type v := Module.Free.ChooseBasisIndex (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b : Basis ι (R ⧸ p) (S ⧸ map (algebraMap R S) p) := Module.Free.chooseBasis (R ⧸ p) (S ⧸ map (algebraMap R S) p)
b' : ι → S := fun i => ⋯.choose
b_eq_b' : ⇑b = ⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b'
b'' : ι → L := ⇑(algebraMap S L) ∘ b'
⊢ LinearIndependent K b''
tactic: have b''_li : LinearIndependent K b'' := ?_