Theorem: AlgebraicGeometry.StructureSheaf.comapFunIsLocallyFraction
File: Mathlib/AlgebraicGeometry/StructureSheaf.lean

Proof steps:
state_before: R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
⊢ (isLocallyFraction S).pred (comapFun f U V hUV s)
state_after: case mk
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
⊢ ∃ V_1, ∃ (_ : ↑⟨p, hpV⟩ ∈ V_1), ∃ i, (isFractionPrelocal S).pred fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)
tactic: rintro ⟨p, hpV⟩
state_before: case mk
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
⊢ ∃ V_1, ∃ (_ : ↑⟨p, hpV⟩ ∈ V_1), ∃ i, (isFractionPrelocal S).pred fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)
state_after: case mk.intro.intro.intro.intro.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
⊢ ∃ V_1, ∃ (_ : ↑⟨p, hpV⟩ ∈ V_1), ∃ i, (isFractionPrelocal S).pred fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)
tactic: rcases hs ⟨PrimeSpectrum.comap f p, hUV hpV⟩ with ⟨W, m, iWU, a, b, h_frac⟩
state_before: case mk.intro.intro.intro.intro.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
⊢ ∃ V_1, ∃ (_ : ↑⟨p, hpV⟩ ∈ V_1), ∃ i, (isFractionPrelocal S).pred fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)
state_after: case mk.intro.intro.intro.intro.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
⊢ ∀ (x : ↥((Opens.comap (PrimeSpectrum.comap f)) W ⊓ V)),
    f b ∉ (↑x).asIdeal ∧
      (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap S (Localizations S ↑x)) (f b) =
        (algebraMap S (Localizations S ↑x)) (f a)
tactic: refine ⟨Opens.comap (PrimeSpectrum.comap f) W ⊓ V, ⟨m, hpV⟩, Opens.infLERight _ _, f a, f b, ?_⟩
state_before: case mk.intro.intro.intro.intro.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
⊢ ∀ (x : ↥((Opens.comap (PrimeSpectrum.comap f)) W ⊓ V)),
    f b ∉ (↑x).asIdeal ∧
      (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap S (Localizations S ↑x)) (f b) =
        (algebraMap S (Localizations S ↑x)) (f a)
state_after: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
⊢ f b ∉ (↑⟨q, ⋯⟩).asIdeal ∧
    (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
      (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
tactic: rintro ⟨q, ⟨hqW, hqV⟩⟩
state_before: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
h_frac :
  ∀ (x : ↥W),
    b ∉ (↑x).asIdeal ∧
      (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) x * (algebraMap R (Localizations R ↑x)) b =
        (algebraMap R (Localizations R ↑x)) a
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
⊢ f b ∉ (↑⟨q, ⋯⟩).asIdeal ∧
    (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
      (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
state_after: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ f b ∉ (↑⟨q, ⋯⟩).asIdeal ∧
    (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
      (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
tactic: specialize h_frac ⟨PrimeSpectrum.comap f q, hqW⟩
state_before: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ f b ∉ (↑⟨q, ⋯⟩).asIdeal ∧
    (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
      (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
state_after: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
    (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
tactic: refine ⟨h_frac.1, ?_⟩
state_before: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (fun x => comapFun f U V hUV s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨q, ⋯⟩ * (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f b) =
    (algebraMap S (Localizations S ↑⟨q, ⋯⟩)) (f a)
state_after: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (Localization.localRingHom ((PrimeSpectrum.comap f) q).asIdeal q.asIdeal f ⋯) (s ⟨(PrimeSpectrum.comap f) q, ⋯⟩) *
      (algebraMap S (Localizations S q)) (f b) =
    (algebraMap S (Localizations S q)) (f a)
tactic: dsimp only [comapFun]
state_before: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (Localization.localRingHom ((PrimeSpectrum.comap f) q).asIdeal q.asIdeal f ⋯) (s ⟨(PrimeSpectrum.comap f) q, ⋯⟩) *
      (algebraMap S (Localizations S q)) (f b) =
    (algebraMap S (Localizations S q)) (f a)
state_after: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (algebraMap S (Localization.AtPrime q.asIdeal)) (f a) = (algebraMap S (Localizations S q)) (f a)
tactic: erw [← Localization.localRingHom_to_map (PrimeSpectrum.comap f q).asIdeal, ← RingHom.map_mul,
    h_frac.2, Localization.localRingHom_to_map]
state_before: case mk.intro.intro.intro.intro.intro.mk.intro
R : Type u
inst✝² : CommRing R
S : Type u
inst✝¹ : CommRing S
P : Type u
inst✝ : CommRing P
f : R →+* S
U : Opens ↑(PrimeSpectrum.Top R)
V : Opens ↑(PrimeSpectrum.Top S)
hUV : V.carrier ⊆ ⇑(PrimeSpectrum.comap f) ⁻¹' U.carrier
s : (x : ↥U) → Localizations R ↑x
hs : (isLocallyFraction R).pred s
p : ↑(PrimeSpectrum.Top S)
hpV : p ∈ V
W : Opens ↑(PrimeSpectrum.Top R)
m : ↑⟨(PrimeSpectrum.comap f) p, ⋯⟩ ∈ W
iWU : W ⟶ U
a b : R
q : ↑(PrimeSpectrum.Top S)
hqW : q ∈ ↑((Opens.comap (PrimeSpectrum.comap f)) W)
hqV : q ∈ ↑V
h_frac :
  b ∉ (↑⟨(PrimeSpectrum.comap f) q, hqW⟩).asIdeal ∧
    (fun x => s ((fun x => ⟨↑x, ⋯⟩) x)) ⟨(PrimeSpectrum.comap f) q, hqW⟩ *
        (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) b =
      (algebraMap R (Localizations R ↑⟨(PrimeSpectrum.comap f) q, hqW⟩)) a
⊢ (algebraMap S (Localization.AtPrime q.asIdeal)) (f a) = (algebraMap S (Localizations S q)) (f a)
state_after: no goals
tactic: rfl