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

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
⊢ 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: 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
⊢ 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 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)
⊢ 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' : ι → 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)
⊢ 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: 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
⊢ 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: 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'
⊢ 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: have b''_li : LinearIndependent K 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''_sp : Submodule.span K (Set.range b'') = ⊤ := ?_
state_before: 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
state_after: case refine_2.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''
b''_sp : Submodule.span K (Set.range b'') = ⊤
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L

case refine_2.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'
b''_li : LinearIndependent K b''
⊢ Submodule.span K (Set.range b'') = ⊤

tactic: let c : Basis ι K L := Basis.mk b''_li b''_sp.ge
state_before: case refine_2.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''
b''_sp : Submodule.span K (Set.range b'') = ⊤
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: case refine_2.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''
b''_sp : Submodule.span K (Set.range b'') = ⊤
c : Basis ι K L := Basis.mk b''_li ⋯
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L

tactic: rw [finrank_eq_card_basis b, finrank_eq_card_basis c]
state_before: case refine_2.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''
b''_sp : Submodule.span K (Set.range b'') = ⊤
c : Basis ι K L := Basis.mk b''_li ⋯
⊢ finrank (R ⧸ p) (S ⧸ map (algebraMap R S) p) = finrank K L
state_after: no goals

tactic: rw [Set.range_comp]
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
⊢ Submodule.span K (Set.range b'') = ⊤
state_after: case refine_2.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'
b''_li : LinearIndependent K b''
⊢ Submodule.span K (⇑(algebraMap S L) '' Set.range b') = ⊤

tactic: refine FinrankQuotientMap.span_eq_top p hp.ne_top _ (top_le_iff.mp ?_)
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
⊢ Submodule.span K (⇑(algebraMap S L) '' Set.range b') = ⊤
state_after: case refine_2.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'
b''_li : LinearIndependent K b''
⊢ ⊤ ≤ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: intro x _
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
⊢ ⊤ ≤ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: have mem_span_b : ((Submodule.mkQ (map (algebraMap R S) p)) x : S ⧸ map (algebraMap R S) p) ∈
    Submodule.span (R ⧸ p) (Set.range b) := b.mem_span _
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
mem_span_b : (Submodule.mkQ (map (algebraMap R S) p)) x ∈ Submodule.span (R ⧸ p) (Set.range ⇑b)
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: rw [← @Submodule.restrictScalars_mem R,
  Submodule.restrictScalars_span R (R ⧸ p) Ideal.Quotient.mk_surjective, b_eq_b',
  Set.range_comp, ← Submodule.map_span] at mem_span_b
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
mem_span_b : (Submodule.mkQ (map (algebraMap R S) p)) x ∈ Submodule.span (R ⧸ p) (Set.range ⇑b)
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: obtain ⟨y, y_mem, y_eq⟩ := Submodule.mem_map.mp mem_span_b
state_before: case refine_2.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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : (↑R (Submodule.mkQ (map (algebraMap R S) p))) y = (Submodule.mkQ (map (algebraMap R S) p)) x
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: suffices y + -(y - x) ∈ _ by simpa
state_before: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : (↑R (Submodule.mkQ (map (algebraMap R S) p))) y = (Submodule.mkQ (map (algebraMap R S) p)) x
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : (↑R (Submodule.mkQ (map (algebraMap R S) p))) y = (Submodule.mkQ (map (algebraMap R S) p)) x
⊢ y + -(y - x) ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: rw [LinearMap.restrictScalars_apply, Submodule.mkQ_apply, Submodule.mkQ_apply,
  Submodule.Quotient.eq] at y_eq
state_before: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : (↑R (Submodule.mkQ (map (algebraMap R S) p))) y = (Submodule.mkQ (map (algebraMap R S) p)) x
⊢ y + -(y - x) ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : y - x ∈ map (algebraMap R S) p
⊢ y + -(y - x) ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)

tactic: exact add_mem (Submodule.mem_sup_left y_mem) (neg_mem <| Submodule.mem_sup_right y_eq)
state_before: case refine_2.refine_1.intro.intro
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''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : y - x ∈ map (algebraMap R S) p
⊢ y + -(y - x) ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: no goals

tactic: simpa
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'
b''_li : LinearIndependent K b''
x : S
a✝ : x ∈ ⊤
mem_span_b :
  (Submodule.mkQ (map (algebraMap R S) p)) x ∈
    Submodule.map (↑R (Submodule.mkQ (map (algebraMap R S) p))) (Submodule.span R (Set.range b'))
y : S
y_mem : y ∈ Submodule.span R (Set.range b')
y_eq : (↑R (Submodule.mkQ (map (algebraMap R S) p))) y = (Submodule.mkQ (map (algebraMap R S) p)) x
this : y + -(y - x) ∈ ?m.257992
⊢ x ∈ Submodule.span R (Set.range b') ⊔ Submodule.restrictScalars R (map (algebraMap R S) p)
state_after: no goals

tactic: have := b.linearIndependent
state_before: 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''
state_after: 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'
this : LinearIndependent (R ⧸ p) ⇑b
⊢ LinearIndependent K b''

tactic: rw [b_eq_b'] at this
state_before: 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'
this : LinearIndependent (R ⧸ p) ⇑b
⊢ LinearIndependent K b''
state_after: 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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ LinearIndependent K b''

tactic: convert FinrankQuotientMap.linearIndependent_of_nontrivial K _
    ((Algebra.linearMap S L).restrictScalars R) _ ((Submodule.mkQ _).restrictScalars R) this
state_before: 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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ LinearIndependent K b''
state_after: case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ RingHom.ker (algebraMap R (R ⧸ p)) ≠ ⊤

case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ Function.Injective ⇑(↑R (Algebra.linearMap S L))

tactic: rw [Quotient.algebraMap_eq, Ideal.mk_ker]
state_before: case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ RingHom.ker (algebraMap R (R ⧸ p)) ≠ ⊤
state_after: case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ p ≠ ⊤

tactic: exact hp.ne_top
state_before: case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ p ≠ ⊤
state_after: no goals

tactic: exact IsFractionRing.injective S L
state_before: case refine_1.convert_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'
this : LinearIndependent (R ⧸ p) (⇑(↑R (Submodule.mkQ (map (algebraMap R S) p))) ∘ b')
⊢ Function.Injective ⇑(↑R (Algebra.linearMap S L))
state_after: no goals