/-- Using `homogeneousLocalizationToStalk`, we construct a ring isomorphism between stalk at `x`
and homogeneous localization at `x` for any point `x` in `Proj`.-/
def Proj.stalkIso' (x : ProjectiveSpectrum.top 𝒜) :
    (Proj.structureSheaf 𝒜).presheaf.stalk x ≃+* CommRingCat.of (at x) :=
  RingEquiv.ofBijective (stalkToFiberRingHom _ x)
    ⟨fun z1 z2 eq1 => by
      obtain ⟨u1, memu1, s1, rfl⟩ := (Proj.structureSheaf 𝒜).presheaf.germ_exist x z1
      obtain ⟨u2, memu2, s2, rfl⟩ := (Proj.structureSheaf 𝒜).presheaf.germ_exist x z2
      obtain ⟨v1, memv1, i1, ⟨j1, ⟨a1, a1_mem⟩, ⟨b1, b1_mem⟩, hs1⟩⟩ := s1.2 ⟨x, memu1⟩
      obtain ⟨v2, memv2, i2, ⟨j2, ⟨a2, a2_mem⟩, ⟨b2, b2_mem⟩, hs2⟩⟩ := s2.2 ⟨x, memu2⟩
      obtain ⟨b1_nin_x, eq2⟩ := hs1 ⟨x, memv1⟩
      obtain ⟨b2_nin_x, eq3⟩ := hs2 ⟨x, memv2⟩
      dsimp only at eq1 eq2 eq3
      erw [stalkToFiberRingHom_germ 𝒜 u1 ⟨x, memu1⟩ s1,
        stalkToFiberRingHom_germ 𝒜 u2 ⟨x, memu2⟩ s2] at eq1
      erw [eq1] at eq2
      erw [eq2, Quotient.eq''] at eq3
      change Localization.mk _ _ = Localization.mk _ _ at eq3
      rw [Localization.mk_eq_mk', IsLocalization.eq] at eq3
      obtain ⟨⟨c, hc⟩, eq3⟩ := eq3
      have eq3' :
        ∀ (y : ProjectiveSpectrum.top 𝒜)
          (hy : y ∈ ProjectiveSpectrum.basicOpen 𝒜 b1 ⊓ ProjectiveSpectrum.basicOpen 𝒜 b2 ⊓
                ProjectiveSpectrum.basicOpen 𝒜 c), (Localization.mk a1 ⟨b1,
                  show b1 ∉ y.asHomogeneousIdeal by
                    rw [← ProjectiveSpectrum.mem_basicOpen]
                    exact leOfHom (Opens.infLELeft _ _ ≫ Opens.infLELeft _ _) hy⟩ :
              Localization.AtPrime y.1.toIdeal) = Localization.mk a2
              ⟨b2, by
                change b2 ∉ y.asHomogeneousIdeal
                rw [← ProjectiveSpectrum.mem_basicOpen]
                exact leOfHom (Opens.infLELeft _ _ ≫ Opens.infLERight _ _) hy⟩ := by
        intro y hy
        

Proof state:
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : ↑(ProjectiveSpectrum.top 𝒜)
u1 : Opens ↑(ProjectiveSpectrum.top 𝒜)
memu1 : x ∈ u1
s1 : (forget CommRingCat).obj ((Sheaf.presheaf (Proj.structureSheaf 𝒜)).obj (op u1))
u2 : Opens ↑(ProjectiveSpectrum.top 𝒜)
memu2 : x ∈ u2
s2 : (forget CommRingCat).obj ((Sheaf.presheaf (Proj.structureSheaf 𝒜)).obj (op u2))
eq1 : ↑s1 { val := x, property := memu1 } = ↑s2 { val := x, property := memu2 }
v1 : Opens ↑(ProjectiveSpectrum.top 𝒜)
memv1 : ↑{ val := x, property := memu1 } ∈ v1
i1 : v1 ⟶ (op u1).unop
j1 : ℕ
a1 : A
a1_mem : a1 ∈ 𝒜 j1
b1 : A
b1_mem : b1 ∈ 𝒜 j1
hs1 :
  ∀ (x : ↥v1),
    ∃ (s_nin : ↑{ val := b1, property := b1_mem } ∉ (↑x).asHomogeneousIdeal),
      (fun x => ↑s1 ((fun x => { val := ↑x, property := (_ : ↑x ∈ ↑(op u1).unop) }) x)) x =
        Quotient.mk''
          { deg := j1, num := { val := a1, property := a1_mem }, den := { val := b1, property := b1_mem },
            den_mem := s_nin }
v2 : Opens ↑(ProjectiveSpectrum.top 𝒜)
memv2 : ↑{ val := x, property := memu2 } ∈ v2
i2 : v2 ⟶ (op u2).unop
j2 : ℕ
a2 : A
a2_mem : a2 ∈ 𝒜 j2
b2 : A
b2_mem : b2 ∈ 𝒜 j2
hs2 :
  ∀ (x : ↥v2),
    ∃ (s_nin : ↑{ val := b2, property := b2_mem } ∉ (↑x).asHomogeneousIdeal),
      (fun x => ↑s2 ((fun x => { val := ↑x, property := (_ : ↑x ∈ ↑(op u2).unop) }) x)) x =
        Quotient.mk''
          { deg := j2, num := { val := a2, property := a2_mem }, den := { val := b2, property := b2_mem },
            den_mem := s_nin }
b1_nin_x : ↑{ val := b1, property := b1_mem } ∉ (↑{ val := x, property := memv1 }).asHomogeneousIdeal
eq2 :
  ↑s2 { val := x, property := memu2 } =
    Quotient.mk''
      { deg := j1, num := { val := a1, property := a1_mem }, den := { val := b1, property := b1_mem },
        den_mem := b1_nin_x }
b2_nin_x : ↑{ val := b2, property := b2_mem } ∉ (↑{ val := x, property := memv2 }).asHomogeneousIdeal
c : A
hc : c ∈ Ideal.primeCompl (HomogeneousIdeal.toIdeal x.asHomogeneousIdeal)
eq3 :
  ↑{ val := c, property := hc } *
      (↑{
            val :=
              ↑{ deg := j2, num := { val := a2, property := a2_mem }, den := { val := b2, property := b2_mem },
                    den_mem := b2_nin_x }.den,
            property :=
              (_ :
                ↑{ deg := j2, num := { val := a2, property := a2_mem }, den := { val := b2, property := b2_mem },
                        den_mem := b2_nin_x }.den ∈
                  Ideal.primeCompl (HomogeneousIdeal.toIdeal x.asHomogeneousIdeal)) } *
        ↑{ deg := j1, num := { val := a1, property := a1_mem }, den := { val := b1, property := b1_mem },
              den_mem := b1_nin_x }.num) =
    ↑{ val := c, property := hc } *
      (↑{
            val :=
              ↑{ deg := j1, num := { val := a1, property := a1_mem }, den := { val := b1, property := b1_mem },
                    den_mem := b1_nin_x }.den,
            property :=
              (_ :
                ↑{ deg := j1, num := { val := a1, property := a1_mem }, den := { val := b1, property := b1_mem },
                        den_mem := b1_nin_x }.den ∈
                  Ideal.primeCompl (HomogeneousIdeal.toIdeal x.asHomogeneousIdeal)) } *
        ↑{ deg := j2, num := { val := a2, property := a2_mem }, den := { val := b2, property := b2_mem },
              den_mem := b2_nin_x }.num)
y : ↑(ProjectiveSpectrum.top 𝒜)
hy : y ∈ ProjectiveSpectrum.basicOpen 𝒜 b1 ⊓ ProjectiveSpectrum.basicOpen 𝒜 b2 ⊓ ProjectiveSpectrum.basicOpen 𝒜 c
⊢ Localization.mk a1 { val := b1, property := (_ : b1 ∉ y.asHomogeneousIdeal) } =
    Localization.mk a2 { val := b2, property := (_ : b2 ∉ y.asHomogeneousIdeal) }

Next tactic:
rw [Localization.mk_eq_mk', IsLocalization.eq]