-- Module: Mathlib.AlgebraicGeometry.ProjectiveSpectrum.StructureSheaf
Goal:
A : Type u_1
σ : Type u_2
inst : CommRing A
inst_1 : SetLike σ A
inst_2 : AddSubgroupClass σ A
𝒜 : ℕ → σ
inst_3 : GradedRing 𝒜
x : (↑(ProjectiveSpectrum.top 𝒜) : Type u_1)
y : at x
f g : NumDenSameDeg 𝒜 x.asHomogeneousIdeal.toIdeal.primeCompl
e :
  ∃ (c : ↥x.asHomogeneousIdeal.toIdeal.primeCompl),
    (↑c : A) * ((↑g.den : A) * (↑f.num : A)) = (↑c : A) * ((↑f.den : A) * (↑g.num : A))
obtain :
  ∀ (c : A) (hc : c ∈ x.asHomogeneousIdeal.toIdeal.primeCompl)
    (hc' :
      (↑(Subtype.mk (p := fun (x_1 : A) ↦ x_1 ∈ x.asHomogeneousIdeal.toIdeal.primeCompl) c hc) : A) *
          ((↑g.den : A) * (↑f.num : A)) =
        (↑(Subtype.mk (p := fun (x_1 : A) ↦ x_1 ∈ x.asHomogeneousIdeal.toIdeal.primeCompl) c hc) : A) *
          ((↑f.den : A) * (↑g.num : A))),
    Eq.{u_1 + 1} (α := (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1))
      ((fun (f : NumDenSameDeg 𝒜 x.asHomogeneousIdeal.toIdeal.primeCompl) ↦
          (((ConcreteCategory.hom (FC := fun (R S : CommRingCat.{u_1}) ↦ (↑R : Type u_1) →+* (↑S : Type u_1)) (CC :=
                    CommRingCat.carrier) (X :=
                    Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                      (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                      (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                        (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ))
                    (Y := Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x)
                    (Presheaf.germ (Sheaf.presheaf (Proj.structureSheaf 𝒜))
                        (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) x ⋯ :
                      Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                          (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                          (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                            (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ) ⟶
                        Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) :
                  (↑(Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                          (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                          (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                            (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)) :
                      Type u_1) →+*
                    (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)) :
                (a :
                    (↑((Proj.structureSheaf 𝒜).presheaf.obj (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)))) :
                      Type u_1)) →
                  (↑((Proj.structureSheaf 𝒜).presheaf.stalk x) : Type u_1))
              (sectionInBasicOpen 𝒜 x f) :
            (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)))
        f)
      ((fun (f : NumDenSameDeg 𝒜 x.asHomogeneousIdeal.toIdeal.primeCompl) ↦
          (((ConcreteCategory.hom (FC := fun (R S : CommRingCat.{u_1}) ↦ (↑R : Type u_1) →+* (↑S : Type u_1)) (CC :=
                    CommRingCat.carrier) (X :=
                    Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                      (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                      (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                        (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ))
                    (Y := Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x)
                    (Presheaf.germ (Sheaf.presheaf (Proj.structureSheaf 𝒜))
                        (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) x ⋯ :
                      Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                          (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                          (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                            (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ) ⟶
                        Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) :
                  (↑(Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                          (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                          (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                            (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)) :
                      Type u_1) →+*
                    (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)) :
                (a :
                    (↑((Proj.structureSheaf 𝒜).presheaf.obj (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)))) :
                      Type u_1)) →
                  (↑((Proj.structureSheaf 𝒜).presheaf.stalk x) : Type u_1))
              (sectionInBasicOpen 𝒜 x f) :
            (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)))
        g)
⊢ Eq.{u_1 + 1} (α := (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1))
    ((fun (f : NumDenSameDeg 𝒜 x.asHomogeneousIdeal.toIdeal.primeCompl) ↦
        (((ConcreteCategory.hom (FC := fun (R S : CommRingCat.{u_1}) ↦ (↑R : Type u_1) →+* (↑S : Type u_1)) (CC :=
                  CommRingCat.carrier) (X :=
                  Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                    (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                    (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                      (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ))
                  (Y := Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x)
                  (Presheaf.germ (Sheaf.presheaf (Proj.structureSheaf 𝒜)) (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A))
                      x ⋯ :
                    Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                        (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                        (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                          (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ) ⟶
                      Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) :
                (↑(Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                        (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                        (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                          (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)) :
                    Type u_1) →+*
                  (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)) :
              (a :
                  (↑((Proj.structureSheaf 𝒜).presheaf.obj (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)))) :
                    Type u_1)) →
                (↑((Proj.structureSheaf 𝒜).presheaf.stalk x) : Type u_1))
            (sectionInBasicOpen 𝒜 x f) :
          (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)))
      f)
    ((fun (f : NumDenSameDeg 𝒜 x.asHomogeneousIdeal.toIdeal.primeCompl) ↦
        (((ConcreteCategory.hom (FC := fun (R S : CommRingCat.{u_1}) ↦ (↑R : Type u_1) →+* (↑S : Type u_1)) (CC :=
                  CommRingCat.carrier) (X :=
                  Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                    (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                    (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                      (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ))
                  (Y := Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x)
                  (Presheaf.germ (Sheaf.presheaf (Proj.structureSheaf 𝒜)) (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A))
                      x ⋯ :
                    Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                        (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                        (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                          (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ) ⟶
                      Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) :
                (↑(Functor.obj (C := (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)
                        (Sheaf.presheaf (Proj.structureSheaf 𝒜) : Presheaf CommRingCat (ProjectiveSpectrum.top 𝒜))
                        (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)) :
                          (Opens (↑(ProjectiveSpectrum.top 𝒜) : Type u_1))ᵒᵖ)) :
                    Type u_1) →+*
                  (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)) :
              (a :
                  (↑((Proj.structureSheaf 𝒜).presheaf.obj (op (ProjectiveSpectrum.basicOpen 𝒜 (↑f.den : A)))) :
                    Type u_1)) →
                (↑((Proj.structureSheaf 𝒜).presheaf.stalk x) : Type u_1))
            (sectionInBasicOpen 𝒜 x f) :
          (↑(Presheaf.stalk (Sheaf.presheaf (Proj.structureSheaf 𝒜)) x) : Type u_1)))
      g)

Tactic:
obtain ⟨⟨c, hc⟩, hc'⟩ := e