[GOAL]
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
hz : z ∈ span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
rw [← submodule_span_eq, Finsupp.span_eq_range_total, LinearMap.mem_range] at hz 
[GOAL]
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
hz : ∃ y, ↑(Finsupp.total (↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)) (Away f) (Away f) Subtype.val) y = z
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
rcases hz with ⟨c, eq1⟩
[GOAL]
case intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ↑(Finsupp.total (↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)) (Away f) (Away f) Subtype.val) c = z
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
rw [Finsupp.total_apply, Finsupp.sum] at eq1 
[GOAL]
case intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
obtain ⟨⟨_, N, rfl⟩, hN⟩ := IsLocalization.exist_integer_multiples_of_finset (Submonoid.powers f) (c.support.image c)
[GOAL]
case intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
hN :
  ∀ (a : Away f),
    a ∈ image (↑c) c.support →
      IsLocalization.IsInteger A
        (↑{ val := (fun x x_1 => x ^ x_1) f N,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
          a)
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
choose acd hacd using hN
[GOAL]
case intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
acd : (a : Away f) → a ∈ image (↑c) c.support → A
hacd :
  ∀ (a : Away f) (a_1 : a ∈ image (↑c) c.support),
    ↑(algebraMap A (Away f)) (acd a a_1) =
      ↑{ val := (fun x x_1 => x ^ x_1) f N,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
        a
⊢ ∃ c N acd,
    f ^ N • z =
      ↑(algebraMap A (Away f))
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
refine' ⟨c, N, acd, _⟩
[GOAL]
case intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
acd : (a : Away f) → a ∈ image (↑c) c.support → A
hacd :
  ∀ (a : Away f) (a_1 : a ∈ image (↑c) c.support),
    ↑(algebraMap A (Away f)) (acd a a_1) =
      ↑{ val := (fun x x_1 => x ^ x_1) f N,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
        a
⊢ f ^ N • z =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
rw [← eq1, smul_sum, map_sum, ← sum_attach]
[GOAL]
case intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
acd : (a : Away f) → a ∈ image (↑c) c.support → A
hacd :
  ∀ (a : Away f) (a_1 : a ∈ image (↑c) c.support),
    ↑(algebraMap A (Away f)) (acd a a_1) =
      ↑{ val := (fun x x_1 => x ^ x_1) f N,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
        a
⊢ ∑ x_1 in attach c.support, f ^ N • ↑c ↑x_1 • ↑↑x_1 =
    ∑ x_1 in attach c.support,
      ↑(algebraMap A (Away f))
        (acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
congr 1
[GOAL]
case intro.intro.mk.intro.e_f
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
acd : (a : Away f) → a ∈ image (↑c) c.support → A
hacd :
  ∀ (a : Away f) (a_1 : a ∈ image (↑c) c.support),
    ↑(algebraMap A (Away f)) (acd a a_1) =
      ↑{ val := (fun x x_1 => x ^ x_1) f N,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
        a
⊢ (fun x_1 => f ^ N • ↑c ↑x_1 • ↑↑x_1) = fun x_1 =>
    ↑(algebraMap A (Away f))
      (acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
        Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
ext i
[GOAL]
case intro.intro.mk.intro.e_f.h
R : Type u_1
A : Type u_2
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝¹ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
inst✝ : DecidableEq (Away f)
z : Away f
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
eq1 : ∑ a in c.support, ↑c a • ↑a = z
N : ℕ
acd : (a : Away f) → a ∈ image (↑c) c.support → A
hacd :
  ∀ (a : Away f) (a_1 : a ∈ image (↑c) c.support),
    ↑(algebraMap A (Away f)) (acd a a_1) =
      ↑{ val := (fun x x_1 => x ^ x_1) f N,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f N) } •
        a
i : { x_1 // x_1 ∈ c.support }
⊢ f ^ N • ↑c ↑i • ↑↑i =
    ↑(algebraMap A (Away f))
      (acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
        Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
[PROOFSTEP]
rw [_root_.map_mul, hacd, (Classical.choose_spec i.1.2).2, smul_eq_mul, smul_mul_assoc]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
⊢ Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
by_contra rid
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
rid : ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
⊢ False
[PROOFSTEP]
rw [Set.not_disjoint_iff] at rid 
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
rid : ∃ x_1, x_1 ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ∧ x_1 ∈ ↑(Submonoid.powers f)
⊢ False
[PROOFSTEP]
choose g hg using rid
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
g : A
hg : g ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ∧ g ∈ ↑(Submonoid.powers f)
⊢ False
[PROOFSTEP]
obtain ⟨hg1, ⟨k, rfl⟩⟩ := hg
[GOAL]
case intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : (fun x x_1 => x ^ x_1) f k ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal)
⊢ False
[PROOFSTEP]
by_cases k_ineq : 0 < k
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : (fun x x_1 => x ^ x_1) f k ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal)
k_ineq : 0 < k
⊢ False
[PROOFSTEP]
erw [x.1.isPrime.pow_mem_iff_mem _ k_ineq] at hg1 
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : f ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
k_ineq : 0 < k
⊢ False
[PROOFSTEP]
exact x.2 hg1
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : (fun x x_1 => x ^ x_1) f k ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal)
k_ineq : ¬0 < k
⊢ False
[PROOFSTEP]
dsimp at hg1 
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : f ^ k ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal)
k_ineq : ¬0 < k
⊢ False
[PROOFSTEP]
erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1 
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : f ^ k ∈ ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal)
k_ineq : ¬0 < k
⊢ k = 0
[PROOFSTEP]
linarith
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal = ⊤
k_ineq : ¬0 < k
⊢ False
[PROOFSTEP]
apply x.1.isPrime.1
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
k : ℕ
hg1 : HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal = ⊤
k_ineq : ¬0 < k
⊢ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal = ⊤
[PROOFSTEP]
exact hg1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
⊢ carrier x ≠ ⊤
[PROOFSTEP]
have eq_top := disjoint x
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
⊢ carrier x ≠ ⊤
[PROOFSTEP]
classical
contrapose! eq_top
obtain ⟨c, N, acd, eq1⟩ := MemCarrier.clear_denominator x ((Ideal.eq_top_iff_one _).mp eq_top)
rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1 
change Localization.mk (f ^ N) 1 = Localization.mk _ 1 at eq1 
simp only [mk_eq_mk', IsLocalization.eq] at eq1 
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
dsimp at eq1 
erw [one_mul, one_mul] at eq1 
change f ^ _ * f ^ _ = f ^ _ * _ at eq1 
rw [Set.not_disjoint_iff_nonempty_inter]
refine'
  ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _),
    ⟨M + N, by dsimp; rw [pow_add]⟩⟩
generalize_proofs h₁ h₂
exact (Classical.choose_spec h₂).1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
⊢ carrier x ≠ ⊤
[PROOFSTEP]
contrapose! eq_top
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
obtain ⟨c, N, acd, eq1⟩ := MemCarrier.clear_denominator x ((Ideal.eq_top_iff_one _).mp eq_top)
[GOAL]
case intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  f ^ N • HomogeneousLocalization.val 1 =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1 
[GOAL]
case intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  ↑(algebraMap A (Localization (Submonoid.powers f))) (f ^ N) =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
change Localization.mk (f ^ N) 1 = Localization.mk _ 1 at eq1 
[GOAL]
case intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  Localization.mk (f ^ N) 1 =
    Localization.mk
      (↑(algebraMap A A)
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
      1
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
simp only [mk_eq_mk', IsLocalization.eq] at eq1 
[GOAL]
case intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  ∃ c_1,
    ↑c_1 * (↑1 * f ^ N) =
      ↑c_1 *
        (↑1 *
          ↑(algebraMap A A)
            (∑ x_1 in attach c.support,
              acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
                Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑1 * f ^ N) =
    ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑1 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
dsimp at eq1 
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (1 * f ^ N) =
    f ^ M *
      (1 *
        ∑ x_1 in attach c.support,
          acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
erw [one_mul, one_mul] at eq1 
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
change f ^ _ * f ^ _ = f ^ _ * _ at eq1 
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ ¬Disjoint ↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ↑(Submonoid.powers f)
[PROOFSTEP]
rw [Set.not_disjoint_iff_nonempty_inter]
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ Set.Nonempty (↑(HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal) ∩ ↑(Submonoid.powers f))
[PROOFSTEP]
refine'
  ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _),
    ⟨M + N, by dsimp; rw [pow_add]⟩⟩
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ (fun x x_1 => x ^ x_1) f (M + N) = f ^ M * f ^ N
[PROOFSTEP]
dsimp
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ f ^ (M + N) = f ^ M * f ^ N
[PROOFSTEP]
rw [pow_add]
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
i : { x_1 // x_1 ∈ c.support }
x✝ : i ∈ attach c.support
⊢ Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) ∈
    HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
generalize_proofs h₁ h₂
[GOAL]
case intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
eq_top : carrier x = ⊤
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * f ^ N =
    f ^ M *
      ∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
i : { x_1 // x_1 ∈ c.support }
x✝ : i ∈ attach c.support
h₁ : AddSubmonoidClass (Submodule R A) A
h₂ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal
⊢ Exists.choose h₂ ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
exact (Classical.choose_spec h₂).1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : x1 * x2 ∈ carrier x
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
classical
rw [mem_carrier_iff] at hx12 
let J := span ((algebraMap A (Away f) : A → (Away f)) '' x.val.asHomogeneousIdeal)
suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
· rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
clear x1 x2 hx12
intro x1 x2 hx12
induction' x1 using Localization.induction_on with data_x1
induction' x2 using Localization.induction_on with data_x2
rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
rcases MemCarrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
simp only [Algebra.smul_def] at eq1 
change Localization.mk (f ^ N) 1 * (Localization.mk _ _ * Localization.mk _ _) = Localization.mk _ _ at eq1 
simp only [Localization.mk_mul, one_mul] at eq1 
simp only [mk_eq_mk', IsLocalization.eq] at eq1 
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
rw [Submonoid.coe_one, one_mul] at eq1 
change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1 
have that : a1 * a2 * f ^ N * f ^ M ∈ x.val.asHomogeneousIdeal.toIdeal := ?_
rcases x.1.isPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from that) with (h1 | rid2)
rcases x.1.isPrime.mem_or_mem h1 with (h1 | rid1)
rcases x.1.isPrime.mem_or_mem h1 with (h1 | h2)
· left;
  simp only [show
      (Localization.mk a1 ⟨f ^ n1, _⟩ : Away f) =
        Localization.mk a1 1 * Localization.mk 1 (⟨f ^ n1, ⟨n1, rfl⟩⟩ : Submonoid.powers f)
      by rw [Localization.mk_mul, mul_one, one_mul]]
  exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
· right;
  simp only [show (mk a2 ⟨f ^ n2, _⟩ : Away f) = mk a2 1 * Localization.mk 1 (⟨f ^ n2, ⟨n2, rfl⟩⟩ : Submonoid.powers f)
      by rw [Localization.mk_mul, mul_one, one_mul]]
  exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
· exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem N rid1))
· exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem M rid2))
· rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
  refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
  generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : x1 * x2 ∈ carrier x
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
rw [mem_carrier_iff] at hx12 
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : HomogeneousLocalization.val (x1 * x2) ∈ span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
let J := span ((algebraMap A (Away f) : A → (Away f)) '' x.val.asHomogeneousIdeal)
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : HomogeneousLocalization.val (x1 * x2) ∈ span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : HomogeneousLocalization.val (x1 * x2) ∈ span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
h : ∀ (x y : Away f), x * y ∈ J → x ∈ J ∨ y ∈ J
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
rw [HomogeneousLocalization.mul_val] at hx12 
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 :
  HomogeneousLocalization.val x1 * HomogeneousLocalization.val x2 ∈
    span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
h : ∀ (x y : Away f), x * y ∈ J → x ∈ J ∨ y ∈ J
⊢ x1 ∈ carrier x ∨ x2 ∈ carrier x
[PROOFSTEP]
exact h x1.val x2.val hx12
[GOAL]
case h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
x1 x2 : ↑(CommRingCat.of (A⁰_ f))
hx12 : HomogeneousLocalization.val (x1 * x2) ∈ span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ ∀ (x y : Away f), x * y ∈ J → x ∈ J ∨ y ∈ J
[PROOFSTEP]
clear x1 x2 hx12
[GOAL]
case h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
⊢ ∀ (x y : Away f), x * y ∈ J → x ∈ J ∨ y ∈ J
[PROOFSTEP]
intro x1 x2 hx12
[GOAL]
case h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12 : x1 * x2 ∈ J
⊢ x1 ∈ J ∨ x2 ∈ J
[PROOFSTEP]
induction' x1 using Localization.induction_on with data_x1
[GOAL]
case h.H
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝ : x1 * x2 ∈ J
data_x1 : A × { x // x ∈ Submonoid.powers f }
hx12 : Localization.mk data_x1.fst data_x1.snd * x2 ∈ J
⊢ Localization.mk data_x1.fst data_x1.snd ∈ J ∨ x2 ∈ J
[PROOFSTEP]
induction' x2 using Localization.induction_on with data_x2
[GOAL]
case h.H.H
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
data_x1 : A × { x // x ∈ Submonoid.powers f }
hx12✝¹ : Localization.mk data_x1.fst data_x1.snd * x2 ∈ J
data_x2 : A × { x // x ∈ Submonoid.powers f }
hx12✝ : x1 * Localization.mk data_x2.fst data_x2.snd ∈ J
hx12 : Localization.mk data_x1.fst data_x1.snd * Localization.mk data_x2.fst data_x2.snd ∈ J
⊢ Localization.mk data_x1.fst data_x1.snd ∈ J ∨ Localization.mk data_x2.fst data_x2.snd ∈ J
[PROOFSTEP]
rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
rcases MemCarrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  f ^ N •
      (Localization.mk
          (a1,
              { val := (fun x x_1 => x ^ x_1) f n1,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
          (a1,
              { val := (fun x x_1 => x ^ x_1) f n1,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
        Localization.mk
          (a2,
              { val := (fun x x_1 => x ^ x_1) f n2,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
          (a2,
              { val := (fun x x_1 => x ^ x_1) f n2,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd) =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
simp only [Algebra.smul_def] at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  ↑(algebraMap A (Away f)) (f ^ N) *
      (Localization.mk a1
          { val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
        Localization.mk a2
          { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) =
    ↑(algebraMap A (Away f))
      (∑ x_1 in attach c.support,
        acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
change Localization.mk (f ^ N) 1 * (Localization.mk _ _ * Localization.mk _ _) = Localization.mk _ _ at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  Localization.mk (f ^ N) 1 *
      (Localization.mk a1
          { val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
        Localization.mk a2
          { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) =
    Localization.mk
      (↑(algebraMap A A)
        (∑ x_1 in attach c.support,
          acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
      1
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
simp only [Localization.mk_mul, one_mul] at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  Localization.mk (f ^ N * (a1 * a2))
      ({ val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
        { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) =
    Localization.mk
      (↑(algebraMap A A)
        (∑ x_1 in attach c.support,
          acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
      1
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
simp only [mk_eq_mk', IsLocalization.eq] at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
eq1 :
  ∃ c_1,
    ↑c_1 * (↑1 * (f ^ N * (a1 * a2))) =
      ↑c_1 *
        (↑({ val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
              { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) *
          ↑(algebraMap A A)
            (∑ x_1 in attach c.support,
              acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
                Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑1 * (f ^ N * (a1 * a2))) =
    ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑({ val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
            { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
rw [Submonoid.coe_one, one_mul] at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (f ^ N * (a1 * a2)) =
    ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑({ val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) } *
            { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }) *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1 
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
have that : a1 * a2 * f ^ N * f ^ M ∈ x.val.asHomogeneousIdeal.toIdeal := ?_
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
rcases x.1.isPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from that) with (h1 | rid2)
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
rid2 : f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
rcases x.1.isPrime.mem_or_mem h1 with (h1 | rid1)
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
rid1 : f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
rid2 : f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
rcases x.1.isPrime.mem_or_mem h1 with (h1 | h2)
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inl
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝¹ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
left
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inl.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝¹ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
      (a1,
          { val := (fun x x_1 => x ^ x_1) f n1,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
      (a1,
          { val := (fun x x_1 => x ^ x_1) f n1,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
    J
[PROOFSTEP]
simp only [show
    (Localization.mk a1 ⟨f ^ n1, _⟩ : Away f) =
      Localization.mk a1 1 * Localization.mk 1 (⟨f ^ n1, ⟨n1, rfl⟩⟩ : Submonoid.powers f)
    by rw [Localization.mk_mul, mul_one, one_mul]]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝¹ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk a1 { val := f ^ n1, property := ?m.499245 } =
    Localization.mk a1 1 *
      Localization.mk 1 { val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ n1) }
[PROOFSTEP]
rw [Localization.mk_mul, mul_one, one_mul]
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inl.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝¹ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk a1 1 *
      Localization.mk 1 { val := f ^ n1, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ n1) } ∈
    span ((fun a => ↑(algebraMap A (Away f)) a) '' ↑(↑x).asHomogeneousIdeal)
[PROOFSTEP]
exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h2 : a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
right
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inr.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h2 : a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
      (a2,
          { val := (fun x x_1 => x ^ x_1) f n2,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
      (a2,
          { val := (fun x x_1 => x ^ x_1) f n2,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
[PROOFSTEP]
simp only [show (mk a2 ⟨f ^ n2, _⟩ : Away f) = mk a2 1 * Localization.mk 1 (⟨f ^ n2, ⟨n2, rfl⟩⟩ : Submonoid.powers f) by
    rw [Localization.mk_mul, mul_one, one_mul]]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h2 : a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk a2 { val := f ^ n2, property := ?m.654160 } =
    Localization.mk a2 1 *
      Localization.mk 1 { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ n2) }
[PROOFSTEP]
rw [Localization.mk_mul, mul_one, one_mul]
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inl.inr.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1✝ : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h2 : a2 ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk a2 1 *
      Localization.mk 1 { val := f ^ n2, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ n2) } ∈
    span ((fun a => ↑(algebraMap A (Away f)) a) '' ↑(↑x).asHomogeneousIdeal)
[PROOFSTEP]
exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inl.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
h1 : a1 * a2 * f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
rid1 : f ^ N ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem N rid1))
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_2.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
that : a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
rid2 : f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
⊢ Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd ∈
      J ∨
    Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
      J
[PROOFSTEP]
exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem M rid2))
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ a1 * a2 * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
⊢ f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal))) ∈
    HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝¹ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
i : { x_1 // x_1 ∈ c.support }
x✝ : i ∈ attach c.support
⊢ Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) ∈
    HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
generalize_proofs h₁ h₂
[GOAL]
case h.H.H.mk.mk.intro.mk.mk.intro.intro.intro.intro.intro.mk.intro.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x✝¹ : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
x : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
J : Ideal (Away f) := span (↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)
x1 x2 : Away f
hx12✝² : x1 * x2 ∈ J
a1 : A
n1 : ℕ
hx12✝¹ :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      x2 ∈
    J
a2 : A
n2 : ℕ
hx12✝ :
  x1 *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
hx12 :
  Localization.mk
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).fst
        (a1,
            { val := (fun x x_1 => x ^ x_1) f n1,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n1) }).snd *
      Localization.mk
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).fst
        (a2,
            { val := (fun x x_1 => x ^ x_1) f n2,
              property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n2) }).snd ∈
    J
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y : Away f) → y ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * (a1 * a2)) =
    f ^ M *
      (f ^ n1 * f ^ n2 *
        ↑(algebraMap A A)
          (∑ x_1 in attach c.support,
            acd (↑c ↑x_1) (_ : ↑c ↑x_1 ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x_1 ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal)))
i : { x_1 // x_1 ∈ c.support }
x✝ : i ∈ attach c.support
h₁ : AddSubmonoidClass (Submodule R A) A
h₂ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑x).asHomogeneousIdeal
⊢ Exists.choose h₂ ∈ HomogeneousIdeal.toIdeal (↑x).asHomogeneousIdeal
[PROOFSTEP]
exact (Classical.choose_spec h₂).1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
⊢ toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 }) =
    {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
classical
ext1 y
constructor <;> intro hy
· refine' ⟨y.2, _⟩
  rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy 
  rw [ProjectiveSpectrum.mem_coe_basicOpen]
  intro a_mem_y
  apply hy
  rw [toFun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
  dsimp; rcases b_mem2 with ⟨k, hk⟩
  dsimp at hk 
  simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : Away f) = Localization.mk 1 (⟨f ^ k, ⟨_, rfl⟩⟩ : Submonoid.powers f) * mk a 1 by
      rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
  exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
· change y.1 ∈ ProjectiveSpectrum.basicOpen 𝒜 f ⊓ ProjectiveSpectrum.basicOpen 𝒜 a at hy 
  rcases hy with ⟨hy1, hy2⟩
  rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2 
  rw [Set.mem_preimage, toFun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
  intro rid; dsimp at rid 
  rcases MemCarrier.clear_denominator _ rid with ⟨c, N, acd, eq1⟩
  rw [Algebra.smul_def] at eq1 
  change Localization.mk (f ^ N) 1 * Localization.mk _ _ = Localization.mk _ _ at eq1 
  rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1 
  rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
  rw [Submonoid.coe_one, one_mul] at eq1 
  simp only [Subtype.coe_mk] at eq1 
  have : a * f ^ N * f ^ M ∈ y.val.asHomogeneousIdeal.toIdeal :=
    by
    rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
    refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
    generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
  rcases y.1.isPrime.mem_or_mem this with (H1 | H3)
  rcases y.1.isPrime.mem_or_mem H1 with (H1 | H2)
  · exact hy2 H1
  · exact y.2 (y.1.isPrime.mem_of_pow_mem N H2)
  · exact y.2 (y.1.isPrime.mem_of_pow_mem M H3)
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
⊢ toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 }) =
    {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
ext1 y
[GOAL]
case h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
⊢ y ∈
      toFun f ⁻¹'
        ↑(sbo
            Quotient.mk''
              { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                den_mem := b_mem2 }) ↔
    y ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
constructor
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
⊢ y ∈
      toFun f ⁻¹'
        ↑(sbo
            Quotient.mk''
              { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                den_mem := b_mem2 }) →
    y ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
intro hy
[GOAL]
case h.mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
⊢ y ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a} →
    y ∈
      toFun f ⁻¹'
        ↑(sbo
            Quotient.mk''
              { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                den_mem := b_mem2 })
[PROOFSTEP]
intro hy
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
⊢ y ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
refine' ⟨y.2, _⟩
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
⊢ ↑y ∈ ↑(pbo a)
[PROOFSTEP]
rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy 
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
⊢ ↑y ∈ ↑(pbo a)
[PROOFSTEP]
rw [ProjectiveSpectrum.mem_coe_basicOpen]
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
⊢ ¬a ∈ (↑y).asHomogeneousIdeal
[PROOFSTEP]
intro a_mem_y
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
apply hy
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
⊢ Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    (toFun f y).asIdeal
[PROOFSTEP]
rw [toFun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
⊢ Localization.mk a
      {
        val :=
          ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                den_mem := b_mem2 }.den,
        property :=
          (_ :
            ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                    den_mem := b_mem2 }.den ∈
              Submonoid.powers f) } ∈
    span (↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)
[PROOFSTEP]
dsimp
[GOAL]
case h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy :
  ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      (toFun f y).asIdeal
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
⊢ Localization.mk a { val := b, property := b_mem2 } ∈ span (↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)
[PROOFSTEP]
rcases b_mem2 with ⟨k, hk⟩
[GOAL]
case h.mp.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : (fun x x_1 => x ^ x_1) f k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ Localization.mk a { val := b, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
    span (↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)
[PROOFSTEP]
dsimp at hk 
[GOAL]
case h.mp.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : f ^ k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ Localization.mk a { val := b, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
    span (↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)
[PROOFSTEP]
simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : Away f) = Localization.mk 1 (⟨f ^ k, ⟨_, rfl⟩⟩ : Submonoid.powers f) * mk a 1 by
    rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : f ^ k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ Localization.mk a { val := b, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } =
    Localization.mk 1 { val := f ^ k, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ k) } * Localization.mk a 1
[PROOFSTEP]
rw [mk_mul, one_mul, mul_one]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : f ^ k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ Localization.mk a { val := b, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } =
    Localization.mk a { val := f ^ k, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ k) }
[PROOFSTEP]
congr
[GOAL]
case e_y.e_val
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : f ^ k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ b = f ^ k
[PROOFSTEP]
rw [hk]
[GOAL]
case h.mp.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k✝ : ℕ
a_mem : a ∈ 𝒜 k✝
b_mem1 : b ∈ 𝒜 k✝
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
a_mem_y : a ∈ (↑y).asHomogeneousIdeal
k : ℕ
hk : f ^ k = b
hy :
  ¬Quotient.mk''
        { deg := k✝, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = b) } ∈
      (toFun f y).asIdeal
⊢ Localization.mk 1 { val := f ^ k, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ k) } * Localization.mk a 1 ∈
    span (↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)
[PROOFSTEP]
exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
[GOAL]
case h.mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy : y ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
⊢ y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
[PROOFSTEP]
change y.1 ∈ ProjectiveSpectrum.basicOpen 𝒜 f ⊓ ProjectiveSpectrum.basicOpen 𝒜 a at hy 
[GOAL]
case h.mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy : ↑y ∈ (pbo f) ⊓ pbo a
⊢ y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
[PROOFSTEP]
rcases hy with ⟨hy1, hy2⟩
[GOAL]
case h.mpr.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ↑y ∈ ↑(pbo f)
hy2 : ↑y ∈ ↑(pbo a)
⊢ y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
[PROOFSTEP]
rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2 
[GOAL]
case h.mpr.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
⊢ y ∈
    toFun f ⁻¹'
      ↑(sbo
          Quotient.mk''
            { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 })
[PROOFSTEP]
rw [Set.mem_preimage, toFun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
[GOAL]
case h.mpr.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
⊢ ¬Quotient.mk''
        { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
          den_mem := b_mem2 } ∈
      { asIdeal := carrier y, IsPrime := (_ : IsPrime (carrier y)) }.asIdeal
[PROOFSTEP]
intro rid
[GOAL]
case h.mpr.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    { asIdeal := carrier y, IsPrime := (_ : IsPrime (carrier y)) }.asIdeal
⊢ False
[PROOFSTEP]
dsimp at rid 
[GOAL]
case h.mpr.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
⊢ False
[PROOFSTEP]
rcases MemCarrier.clear_denominator _ rid with ⟨c, N, acd, eq1⟩
[GOAL]
case h.mpr.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
eq1 :
  f ^ N •
      HomogeneousLocalization.val
        (Quotient.mk''
          { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
            den_mem := b_mem2 }) =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal))
⊢ False
[PROOFSTEP]
rw [Algebra.smul_def] at eq1 
[GOAL]
case h.mpr.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
eq1 :
  ↑(algebraMap A (Localization (Submonoid.powers f))) (f ^ N) *
      HomogeneousLocalization.val
        (Quotient.mk''
          { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
            den_mem := b_mem2 }) =
    ↑(algebraMap A (Away f))
      (∑ i in attach c.support,
        acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
          Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal))
⊢ False
[PROOFSTEP]
change Localization.mk (f ^ N) 1 * Localization.mk _ _ = Localization.mk _ _ at eq1 
[GOAL]
case h.mpr.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
eq1 :
  Localization.mk (f ^ N) 1 *
      Localization.mk
        ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 }.num
        {
          val :=
            ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                  den_mem := b_mem2 }.den,
          property :=
            (_ :
              ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                      den_mem := b_mem2 }.den ∈
                Submonoid.powers f) } =
    Localization.mk
      (↑(algebraMap A A)
        (∑ i in attach c.support,
          acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
            Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
      1
⊢ False
[PROOFSTEP]
rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1 
[GOAL]
case h.mpr.intro.intro.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
eq1 :
  ∃ c_1,
    ↑c_1 *
        (↑1 *
          (f ^ N *
            ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                  den_mem := b_mem2 }.num)) =
      ↑c_1 *
        (↑{
              val :=
                ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                      den_mem := b_mem2 }.den,
              property :=
                (_ :
                  ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                          den_mem := b_mem2 }.den ∈
                    Submonoid.powers f) } *
          ↑(algebraMap A A)
            (∑ i in attach c.support,
              acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
                Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ False
[PROOFSTEP]
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑1 *
        (f ^ N *
          ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                den_mem := b_mem2 }.num)) =
    ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑{
            val :=
              ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                    den_mem := b_mem2 }.den,
            property :=
              (_ :
                ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                        den_mem := b_mem2 }.den ∈
                  Submonoid.powers f) } *
        ↑(algebraMap A A)
          (∑ i in attach c.support,
            acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ False
[PROOFSTEP]
rw [Submonoid.coe_one, one_mul] at eq1 
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (f ^ N *
        ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
              den_mem := b_mem2 }.num) =
    ↑{ val := (fun x x_1 => x ^ x_1) f M,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f M) } *
      (↑{
            val :=
              ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                    den_mem := b_mem2 }.den,
            property :=
              (_ :
                ↑{ deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 },
                        den_mem := b_mem2 }.den ∈
                  Submonoid.powers f) } *
        ↑(algebraMap A A)
          (∑ i in attach c.support,
            acd (↑c ↑i) (_ : ↑c ↑i ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ False
[PROOFSTEP]
simp only [Subtype.coe_mk] at eq1 
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ False
[PROOFSTEP]
have : a * f ^ N * f ^ M ∈ y.val.asHomogeneousIdeal.toIdeal :=
  by
  rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
  refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
  generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
[PROOFSTEP]
rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
⊢ f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal))) ∈
    HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
[PROOFSTEP]
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
i : { x // x ∈ c.support }
x✝ : i ∈ attach c.support
⊢ Exists.choose (_ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) ∈
    HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
[PROOFSTEP]
generalize_proofs h₁ h₂
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
i : { x // x ∈ c.support }
x✝ : i ∈ attach c.support
h₁ : AddSubmonoidClass (Submodule R A) A
h₂ : ↑↑i ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal
⊢ Exists.choose h₂ ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
[PROOFSTEP]
exact (Classical.choose_spec h₂).1
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
rcases y.1.isPrime.mem_or_mem this with (H1 | H3)
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro.inl
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H1 : a * f ^ N ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
case h.mpr.intro.intro.intro.intro.intro.mk.intro.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H3 : f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
rcases y.1.isPrime.mem_or_mem H1 with (H1 | H2)
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro.inl.inl
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H1✝ : a * f ^ N ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H1 : a ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
exact hy2 H1
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro.inl.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H1 : a * f ^ N ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H2 : f ^ N ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
exact y.2 (y.1.isPrime.mem_of_pow_mem N H2)
[GOAL]
case h.mpr.intro.intro.intro.intro.intro.mk.intro.inr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
x : ↑(LocallyRingedSpace.toTopCat (LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))))
a b : A
k : ℕ
a_mem : a ∈ 𝒜 k
b_mem1 : b ∈ 𝒜 k
b_mem2 : b ∈ Submonoid.powers f
y : ↑↑(LocallyRingedSpace.restrict Proj (_ : OpenEmbedding ↑(Opens.inclusion (pbo f)))).toSheafedSpace.toPresheafedSpace
hy1 : ¬f ∈ (↑y).asHomogeneousIdeal
hy2 : ¬a ∈ (↑y).asHomogeneousIdeal
rid :
  Quotient.mk''
      { deg := k, num := { val := a, property := a_mem }, den := { val := b, property := b_mem1 }, den_mem := b_mem2 } ∈
    carrier y
c : ↑(↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal) →₀ Away f
N : ℕ
acd : (y_1 : Away f) → y_1 ∈ image (↑c) c.support → A
M : ℕ
eq1 :
  f ^ M * (f ^ N * a) =
    f ^ M *
      (b *
        ↑(algebraMap A A)
          (∑ x in attach c.support,
            acd (↑c ↑x) (_ : ↑c ↑x ∈ image (↑c) c.support) *
              Exists.choose (_ : ↑↑x ∈ ↑(algebraMap A (Away f)) '' ↑(↑y).asHomogeneousIdeal)))
this : a * f ^ N * f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
H3 : f ^ M ∈ HomogeneousIdeal.toIdeal (↑y).asHomogeneousIdeal
⊢ False
[PROOFSTEP]
exact y.2 (y.1.isPrime.mem_of_pow_mem M H3)
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
⊢ Continuous (ToSpec.toFun f)
[PROOFSTEP]
apply IsTopologicalBasis.continuous PrimeSpectrum.isTopologicalBasis_basic_opens
[GOAL]
case hf
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
⊢ ∀ (s : Set (PrimeSpectrum ↑(CommRingCat.of (A⁰_ f)))),
    (s ∈ Set.range fun r => ↑(sbo r)) → IsOpen (ToSpec.toFun f ⁻¹' s)
[PROOFSTEP]
rintro _ ⟨⟨k, ⟨a, ha⟩, ⟨b, hb1⟩, ⟨k', hb2⟩⟩, rfl⟩
[GOAL]
case hf.intro.mk.mk.mk.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
⊢ IsOpen
    (ToSpec.toFun f ⁻¹'
      (fun r => ↑(sbo r))
        (Quot.mk Setoid.r
          { deg := k, num := { val := a, property := ha }, den := { val := b, property := hb1 },
            den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := b, property := hb1 }) }))
[PROOFSTEP]
dsimp
[GOAL]
case hf.intro.mk.mk.mk.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
⊢ IsOpen
    (ToSpec.toFun f ⁻¹'
      ↑(sbo
          Quot.mk Setoid.r
            { deg := k, num := { val := a, property := ha }, den := { val := b, property := hb1 },
              den_mem := (_ : ∃ y, f ^ y = b) }))
[PROOFSTEP]
erw [ToSpec.preimage_eq f a b k ha hb1 ⟨k', hb2⟩]
[GOAL]
case hf.intro.mk.mk.mk.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
⊢ IsOpen {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
refine' isOpen_induced_iff.mpr ⟨(pbo f).1 ⊓ (pbo a).1, IsOpen.inter (pbo f).2 (pbo a).2, _⟩
[GOAL]
case hf.intro.mk.mk.mk.mk.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
⊢ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier) = {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
ext z
[GOAL]
case hf.intro.mk.mk.mk.mk.intro.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
z : ↑((Opens.toTopCat Proj.T).obj (pbo f))
⊢ z ∈ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier) ↔ z ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
constructor
[GOAL]
case hf.intro.mk.mk.mk.mk.intro.h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
z : ↑((Opens.toTopCat Proj.T).obj (pbo f))
⊢ z ∈ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier) → z ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
intro hz
[GOAL]
case hf.intro.mk.mk.mk.mk.intro.h.mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
z : ↑((Opens.toTopCat Proj.T).obj (pbo f))
hz : z ∈ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier)
⊢ z ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
[PROOFSTEP]
simpa [Set.mem_preimage]
[GOAL]
case hf.intro.mk.mk.mk.mk.intro.h.mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
z : ↑((Opens.toTopCat Proj.T).obj (pbo f))
⊢ z ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a} → z ∈ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier)
[PROOFSTEP]
intro hz
[GOAL]
case hf.intro.mk.mk.mk.mk.intro.h.mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
w✝ : ↑(CommRingCat.of (A⁰_ f))
k : ℕ
a : A
ha : a ∈ 𝒜 k
b : A
hb1 : b ∈ 𝒜 k
k' : ℕ
hb2 : (fun x x_1 => x ^ x_1) f k' = ↑{ val := b, property := hb1 }
z : ↑((Opens.toTopCat Proj.T).obj (pbo f))
hz : z ∈ {x | ↑x ∈ (pbo f) ⊓ pbo a}
⊢ z ∈ Subtype.val ⁻¹' ((pbo f).carrier ⊓ (pbo a).carrier)
[PROOFSTEP]
simpa only [Set.inf_eq_inter, Set.mem_inter_iff, Set.mem_preimage]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ ↑(proj 𝒜 i) a ^ m ∈ 𝒜 (m * i)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ ↑(proj 𝒜 i) a ^ m ∈ 𝒜 (m * i)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
⊢ (∀ (i : ℕ),
      Quotient.mk''
          { deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) a ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
        q.asIdeal) ↔
    ∀ (i : ℕ),
      Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
        ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
⊢ (∀ (i : ℕ),
      Quotient.mk''
          { deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) a ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
        q.asIdeal) →
    ∀ (i : ℕ),
      Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
        ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
[PROOFSTEP]
intro h i
[GOAL]
case mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
⊢ (∀ (i : ℕ),
      Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
        ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}) →
    ∀ (i : ℕ),
      Quotient.mk''
          { deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) a ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
        q.asIdeal
[PROOFSTEP]
intro h i
[GOAL]
case mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
h :
  ∀ (i : ℕ),
    Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) a ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                    𝒜 (m • i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
      q.asIdeal
i : ℕ
⊢ Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
    ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
[PROOFSTEP]
specialize h i
[GOAL]
case mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
h :
  ∀ (i : ℕ),
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
      ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
i : ℕ
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
specialize h i
[GOAL]
case mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
h :
  Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
⊢ Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
    ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
[PROOFSTEP]
rw [Set.mem_image]
[GOAL]
case mp
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
h :
  Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
⊢ ∃ x,
    x ∈ {s | s ∈ q.asIdeal} ∧
      ↑(algebraMap (A⁰_ f) (Away f)) x =
        Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
[PROOFSTEP]
refine' ⟨_, h, rfl⟩
[GOAL]
case mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
h :
  Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) } ∈
    ↑(algebraMap (A⁰_ f) (Away f)) '' {s | s ∈ q.asIdeal}
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
rw [Set.mem_image] at h 
[GOAL]
case mpr
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
h :
  ∃ x,
    x ∈ {s | s ∈ q.asIdeal} ∧
      ↑(algebraMap (A⁰_ f) (Away f)) x =
        Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
rcases h with ⟨x, h, hx⟩
[GOAL]
case mpr.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
h : x ∈ {s | s ∈ q.asIdeal}
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
change x ∈ q.asIdeal at h 
[GOAL]
case mpr.intro.intro
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
h : x ∈ q.asIdeal
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert h
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
h : x ∈ q.asIdeal
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) a ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } =
    x
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'']
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
h : x ∈ q.asIdeal
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk
      ↑{ deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) a ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num
      {
        val :=
          ↑{ deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    HomogeneousLocalization.val x
[PROOFSTEP]
dsimp only [Subtype.coe_mk]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
h : x ∈ q.asIdeal
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, f ^ y = f ^ i) } =
    HomogeneousLocalization.val x
[PROOFSTEP]
rw [← hx]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a : A
i : ℕ
x : A⁰_ f
hx :
  ↑(algebraMap (A⁰_ f) (Away f)) x =
    Localization.mk (↑(proj 𝒜 i) a ^ m) { val := f ^ i, property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = f ^ i) }
h : x ∈ q.asIdeal
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ ↑(algebraMap (A⁰_ f) (Away f)) x = HomogeneousLocalization.val x
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
⊢ a + b ∈ carrier f_deg q
[PROOFSTEP]
refine' fun i => (q.2.mem_or_mem _).elim id id
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
⊢ Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) (a + b) ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (a + b)) ^ m ∈
                    𝒜 (m • i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
      Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) (a + b) ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (a + b)) ^ m ∈
                    𝒜 (m • i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
change (Quotient.mk'' ⟨_, _, _, _⟩ : A⁰_ f) ∈ q.1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
⊢ Quotient.mk''
      {
        deg :=
          { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) (a + b) ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (a + b)) ^
                            m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg +
            { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) (a + b) ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (a + b)) ^
                            m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg,
        num :=
          {
            val :=
              ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num *
                ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num,
            property :=
              (_ :
                ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num *
                    ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num ∈
                  𝒜
                    ({ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg +
                      { deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg)) },
        den :=
          {
            val :=
              ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den *
                ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den,
            property :=
              (_ :
                ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den *
                    ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
                  𝒜
                    ({ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg +
                      { deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg)) },
        den_mem :=
          (_ :
            ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den *
                ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } ∈
    q.asIdeal
[PROOFSTEP]
dsimp only [Subtype.coe_mk]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ↑(proj 𝒜 i) (a + b) ^ m * ↑(proj 𝒜 i) (a + b) ^ m,
            property :=
              (_ :
                ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num *
                    ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num ∈
                  𝒜
                    ({ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg +
                      { deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg)) },
        den :=
          { val := f ^ i * f ^ i,
            property :=
              (_ :
                ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den *
                    ↑{ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
                  𝒜
                    ({ deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg +
                      { deg := m * i,
                          num :=
                            { val := ↑(proj 𝒜 i) (a + b) ^ m,
                              property :=
                                (_ :
                                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                          (a + b)) ^
                                      m ∈
                                    𝒜 (m • i)) },
                          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                          den_mem :=
                            (_ :
                              ∃ y,
                                (fun x x_1 => x ^ x_1) f y =
                                  ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.deg)) },
        den_mem :=
          (_ :
            ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den *
                ↑{ deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) (a + b) ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                                      (a + b)) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } ∈
    q.asIdeal
[PROOFSTEP]
simp_rw [← pow_add, map_add, add_pow, mul_comm, ← nsmul_eq_mul]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
            property :=
              (_ :
                (fun x => x ∈ 𝒜 (m * i + m * i))
                  (∑ x in range (m + m + 1),
                    Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
        den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
        den_mem :=
          (_ :
            ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
              Submonoid.powers f) } ∈
    q.asIdeal
[PROOFSTEP]
let g : ℕ → A⁰_ f := fun j =>
  (m + m).choose j •
    if h2 : m + m < j then (0 : A⁰_ f)
    else
      -- Porting note: inlining `l`, `r` causes a "can't synth HMul A⁰_ f A⁰_ f ?" errorif h1 : j ≤ m then
        letI l : A⁰_ f :=
          Quotient.mk'' ⟨m * i, ⟨proj 𝒜 i a ^ j * proj 𝒜 i b ^ (m - j), ?_⟩, ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
        letI r : A⁰_ f := Quotient.mk'' ⟨m * i, ⟨proj 𝒜 i b ^ m, by mem_tac⟩, ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
        l * r
      else
        letI l : A⁰_ f := Quotient.mk'' ⟨m * i, ⟨proj 𝒜 i a ^ m, by mem_tac⟩, ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
        letI r : A⁰_ f :=
          Quotient.mk''
            ⟨m * i, ⟨proj 𝒜 i a ^ (j - m) * proj 𝒜 i b ^ (m + m - j), ?_⟩, ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
        l * r
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i, num := { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j), property := ?m.1574888 },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) b ^ m ∈ 𝒜 (m * i)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i, num := { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j), property := ?m.1574888 },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i, num := { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j), property := ?m.1574888 },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ ↑(proj 𝒜 i) a ^ m ∈ 𝒜 (m * i)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ f ^ i ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ f ^ i ∈ 𝒜 (i * m)
[PROOFSTEP]
mem_tac
[GOAL]
case refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property :=
                      (_ :
                        let l :=
                          Quotient.mk''
                            { deg := m * i,
                              num := { val := ↑(proj 𝒜 i) a ^ m, property := (_ : ↑(proj 𝒜 i) a ^ m ∈ 𝒜 (m * i)) },
                              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                              den_mem :=
                                (_ :
                                  ∃ y,
                                    (fun x x_1 => x ^ x_1) f y =
                                      ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) };
                        ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
            property :=
              (_ :
                (fun x => x ∈ 𝒜 (m * i + m * i))
                  (∑ x in range (m + m + 1),
                    Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
        den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
        den_mem :=
          (_ :
            ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
              Submonoid.powers f) } ∈
    q.asIdeal
case refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)
case refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)
[PROOFSTEP]
rotate_left
[GOAL]
case refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [(_ : m * i = _)]
  -- Porting note: it seems unification with mul_mem is more fiddly reducing value of mem_tac
[GOAL]
case refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 ?m.1610121
[PROOFSTEP]
apply GradedMonoid.toGradedMul.mul_mem (i := j • i) (j := (m - j) • i)
[GOAL]
case refine_1.a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j ∈ 𝒜 (j • i)
[PROOFSTEP]
mem_tac_aux
[GOAL]
case refine_1.a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 ((m - j) • i)
[PROOFSTEP]
mem_tac_aux
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ m * i = j • i + (m - j) • i
[PROOFSTEP]
rw [← add_smul, Nat.add_sub_of_le h1]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : j ≤ m
⊢ m * i = m • i
[PROOFSTEP]
rfl
[GOAL]
case refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)
[PROOFSTEP]
rw [(_ : m * i = _)]
[GOAL]
case refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 ?m.1612661
[PROOFSTEP]
apply GradedMonoid.toGradedMul.mul_mem (i := (j - m) • i) (j := (m + m - j) • i)
[GOAL]
case refine_2.a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) a ^ (j - m) ∈ 𝒜 ((j - m) • i)
[PROOFSTEP]
mem_tac_aux
[GOAL]
case refine_2.a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 ((m + m - j) • i)
[PROOFSTEP]
mem_tac_aux
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ m * i = (j - m) • i + (m + m - j) • i
[PROOFSTEP]
rw [← add_smul]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ m * i = (j - m + (m + m - j)) • i
[PROOFSTEP]
congr
[GOAL]
case e_a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ m = j - m + (m + m - j)
[PROOFSTEP]
zify [le_of_not_lt h2, le_of_not_le h1]
[GOAL]
case e_a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑m = ↑j - ↑m + (↑m + ↑m - ↑j)
[PROOFSTEP]
abel
[GOAL]
case e_a
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i j : ℕ
h2 : ¬m + m < j
h1 : ¬j ≤ m
l : A⁰_ f :=
  Quotient.mk''
    { deg := m * i,
      num :=
        { val := ↑(proj 𝒜 i) a ^ m,
          property :=
            (_ :
              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈ 𝒜 (m • i)) },
      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
      den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ↑m = ↑j - ↑m + (↑m + ↑m - ↑j)
[PROOFSTEP]
abel
[GOAL]
case refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
            property :=
              (_ :
                (fun x => x ∈ 𝒜 (m * i + m * i))
                  (∑ x in range (m + m + 1),
                    Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
        den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
        den_mem :=
          (_ :
            ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
              Submonoid.powers f) } ∈
    q.asIdeal
[PROOFSTEP]
convert_to ∑ i in range (m + m + 1), g i ∈ q.1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
            property :=
              (_ :
                (fun x => x ∈ 𝒜 (m * i + m * i))
                  (∑ x in range (m + m + 1),
                    Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
        den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
        den_mem :=
          (_ :
            ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
              Submonoid.powers f) } =
    ∑ i in range (m + m + 1), g i
case refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ∑ i in range (m + m + 1), g i ∈ q.asIdeal
[PROOFSTEP]
swap
[GOAL]
case refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
⊢ ∑ i in range (m + m + 1), g i ∈ q.asIdeal
[PROOFSTEP]
refine' q.1.sum_mem fun j _ => nsmul_mem _ _
[GOAL]
case refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
j : ℕ
x✝ : j ∈ range (m + m + 1)
⊢ (if h2 : m + m < j then 0
    else
      if h1 : j ≤ m then
        Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
              den_mem :=
                (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) b ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
              den_mem :=
                (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
      else
        Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
              den_mem :=
                (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
              den_mem :=
                (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }) ∈
    q.asIdeal
[PROOFSTEP]
split_ifs
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
j : ℕ
x✝ : j ∈ range (m + m + 1)
h✝ : m + m < j
⊢ 0 ∈ q.asIdeal
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
j : ℕ
x✝ : j ∈ range (m + m + 1)
h✝¹ : ¬m + m < j
h✝ : j ≤ m
⊢ Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
              property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
      Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) b ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                    𝒜 (m • i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
j : ℕ
x✝ : j ∈ range (m + m + 1)
h✝¹ : ¬m + m < j
h✝ : ¬j ≤ m
⊢ Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) a ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                    𝒜 (m • i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
      Quotient.mk''
        { deg := m * i,
          num :=
            { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
              property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
          den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
          den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
exacts [q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Quotient.mk''
      { deg := m * i + m * i,
        num :=
          { val := ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
            property :=
              (_ :
                (fun x => x ∈ 𝒜 (m * i + m * i))
                  (∑ x in range (m + m + 1),
                    Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
        den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
        den_mem :=
          (_ :
            ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
              Submonoid.powers f) } =
    ∑ i in range (m + m + 1), g i
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'']
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk
      ↑{ deg := m * i + m * i,
            num :=
              {
                val :=
                  ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                property :=
                  (_ :
                    (fun x => x ∈ 𝒜 (m * i + m * i))
                      (∑ x in range (m + m + 1),
                        Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
            den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
            den_mem :=
              (_ :
                ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                  Submonoid.powers f) }.num
      {
        val :=
          ↑{ deg := m * i + m * i,
                num :=
                  {
                    val :=
                      ∑ x in range (m + m + 1),
                        Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                    property :=
                      (_ :
                        (fun x => x ∈ 𝒜 (m * i + m * i))
                          (∑ x in range (m + m + 1),
                            Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
                den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
                den_mem :=
                  (_ :
                    ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                      Submonoid.powers f) }.den,
        property :=
          (_ :
            ↑{ deg := m * i + m * i,
                    num :=
                      {
                        val :=
                          ∑ x in range (m + m + 1),
                            Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                        property :=
                          (_ :
                            (fun x => x ∈ 𝒜 (m * i + m * i))
                              (∑ x in range (m + m + 1),
                                Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
                    den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
                    den_mem :=
                      (_ :
                        ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                          Submonoid.powers f) }.den ∈
              Submonoid.powers f) } =
    HomogeneousLocalization.val (∑ i in range (m + m + 1), g i)
[PROOFSTEP]
change _ = (algebraMap (HomogeneousLocalization.Away 𝒜 f) (Localization.Away f)) _
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk
      ↑{ deg := m * i + m * i,
            num :=
              {
                val :=
                  ∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                property :=
                  (_ :
                    (fun x => x ∈ 𝒜 (m * i + m * i))
                      (∑ x in range (m + m + 1),
                        Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
            den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
            den_mem :=
              (_ :
                ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                  Submonoid.powers f) }.num
      {
        val :=
          ↑{ deg := m * i + m * i,
                num :=
                  {
                    val :=
                      ∑ x in range (m + m + 1),
                        Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                    property :=
                      (_ :
                        (fun x => x ∈ 𝒜 (m * i + m * i))
                          (∑ x in range (m + m + 1),
                            Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
                den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
                den_mem :=
                  (_ :
                    ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                      Submonoid.powers f) }.den,
        property :=
          (_ :
            ↑{ deg := m * i + m * i,
                    num :=
                      {
                        val :=
                          ∑ x in range (m + m + 1),
                            Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)),
                        property :=
                          (_ :
                            (fun x => x ∈ 𝒜 (m * i + m * i))
                              (∑ x in range (m + m + 1),
                                Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))) },
                    den := { val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) },
                    den_mem :=
                      (_ :
                        ↑{ val := f ^ (i + i), property := (_ : (fun x => x ∈ 𝒜 (m * i + m * i)) (f ^ (i + i))) } ∈
                          Submonoid.powers f) }.den ∈
              Submonoid.powers f) } =
    ↑(algebraMap (A⁰_ f) (Away f)) (∑ i in range (m + m + 1), g i)
[PROOFSTEP]
dsimp only [Subtype.coe_mk]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk (∑ x in range (m + m + 1), Nat.choose (m + m) x • (↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m + m - x)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    ↑(algebraMap (A⁰_ f) (Away f))
      (∑ i_1 in range (m + m + 1),
        Nat.choose (m + m) i_1 •
          if h2 : m + m < i_1 then 0
          else
            if h1 : i_1 ≤ m then
              Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ i_1 * ↑(proj 𝒜 i) b ^ (m - i_1),
                        property := (_ : ↑(proj 𝒜 i) a ^ i_1 * ↑(proj 𝒜 i) b ^ (m - i_1) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) b ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) }
            else
              Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ (i_1 - m) * ↑(proj 𝒜 i) b ^ (m + m - i_1),
                        property := (_ : ↑(proj 𝒜 i) a ^ (i_1 - m) * ↑(proj 𝒜 i) b ^ (m + m - i_1) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
rw [map_sum, mk_sum]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ ∑ i_1 in range (m + m + 1),
      Localization.mk (Nat.choose (m + m) i_1 • (↑(proj 𝒜 i) a ^ i_1 * ↑(proj 𝒜 i) b ^ (m + m - i_1)))
        { val := f ^ (i + i),
          property :=
            (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    ∑ x in range (m + m + 1),
      ↑(algebraMap (A⁰_ f) (Away f))
        (Nat.choose (m + m) x •
          if h2 : m + m < x then 0
          else
            if h1 : x ≤ m then
              Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m - x),
                        property := (_ : ↑(proj 𝒜 i) a ^ x * ↑(proj 𝒜 i) b ^ (m - x) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) b ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) }
            else
              Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                Quotient.mk''
                  { deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ (x - m) * ↑(proj 𝒜 i) b ^ (m + m - x),
                        property := (_ : ↑(proj 𝒜 i) a ^ (x - m) * ↑(proj 𝒜 i) b ^ (m + m - x) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
apply Finset.sum_congr rfl fun j hj => _
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ ∀ (j : ℕ),
    j ∈ range (m + m + 1) →
      Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
          { val := f ^ (i + i),
            property :=
              (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
        ↑(algebraMap (A⁰_ f) (Away f))
          (Nat.choose (m + m) j •
            if h2 : m + m < j then 0
            else
              if h1 : j ≤ m then
                Quotient.mk''
                    { deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                          property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                  Quotient.mk''
                    { deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) b ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem := (_ : ∃ y, f ^ y = f ^ i) }
              else
                Quotient.mk''
                    { deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) a ^ m,
                          property :=
                            (_ :
                              ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^
                                  m ∈
                                𝒜 (m • i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
                  Quotient.mk''
                    { deg := m * i,
                      num :=
                        { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                          property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                      den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                      den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
intro j hj
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    ↑(algebraMap (A⁰_ f) (Away f))
      (Nat.choose (m + m) j •
        if h2 : m + m < j then 0
        else
          if h1 : j ≤ m then
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) b ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) }
          else
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
change _ = HomogeneousLocalization.val _
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    HomogeneousLocalization.val
      (Nat.choose (m + m) j •
        if h2 : m + m < j then 0
        else
          if h1 : j ≤ m then
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) b ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) }
          else
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
rw [HomogeneousLocalization.smul_val]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      HomogeneousLocalization.val
        (if h2 : m + m < j then 0
        else
          if h1 : j ≤ m then
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) b ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) }
          else
            Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ m,
                      property :=
                        (_ :
                          ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                            𝒜 (m • i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
              Quotient.mk''
                { deg := m * i,
                  num :=
                    { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                      property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                  den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
split_ifs with h2 h1
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : m + m < j
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j • HomogeneousLocalization.val 0
[PROOFSTEP]
exact ((Finset.mem_range.1 hj).not_le h2).elim
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      HomogeneousLocalization.val
        (Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) b ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      HomogeneousLocalization.val
        (Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
all_goals
  simp only [HomogeneousLocalization.mul_val, HomogeneousLocalization.zero_val, HomogeneousLocalization.val_mk'',
    Subtype.coe_mk, mk_mul, ← smul_mk];
  congr 2
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      HomogeneousLocalization.val
        (Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) b ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
simp only [HomogeneousLocalization.mul_val, HomogeneousLocalization.zero_val, HomogeneousLocalization.val_mk'',
  Subtype.coe_mk, mk_mul, ← smul_mk]
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ Nat.choose (m + m) j •
      Localization.mk (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j))
        { val := f ^ (i + i),
          property :=
            (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      Localization.mk (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) * ↑(proj 𝒜 i) b ^ m)
        ({ val := f ^ i,
            property :=
              (_ :
                ↑{ deg := m * i,
                        num :=
                          { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                            property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                        den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
                  Submonoid.powers f) } *
          { val := f ^ i,
            property :=
              (_ :
                ↑{ deg := m * i,
                        num :=
                          { val := ↑(proj 𝒜 i) b ^ m,
                            property :=
                              (_ :
                                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^
                                    m ∈
                                  𝒜 (m • i)) },
                        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                        den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
                  Submonoid.powers f) })
[PROOFSTEP]
congr 2
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ Localization.mk (Nat.choose (m + m) j • (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j)))
      { val := f ^ (i + i),
        property :=
          (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      HomogeneousLocalization.val
        (Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ m,
                  property :=
                    (_ :
                      ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                        𝒜 (m • i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) } *
          Quotient.mk''
            { deg := m * i,
              num :=
                { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                  property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
              den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }, den_mem := (_ : ∃ y, f ^ y = f ^ i) })
[PROOFSTEP]
simp only [HomogeneousLocalization.mul_val, HomogeneousLocalization.zero_val, HomogeneousLocalization.val_mk'',
  Subtype.coe_mk, mk_mul, ← smul_mk]
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ Nat.choose (m + m) j •
      Localization.mk (↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j))
        { val := f ^ (i + i),
          property :=
            (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    Nat.choose (m + m) j •
      Localization.mk (↑(proj 𝒜 i) a ^ m * (↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j)))
        ({ val := f ^ i,
            property :=
              (_ :
                ↑{ deg := m * i,
                        num :=
                          { val := ↑(proj 𝒜 i) a ^ m,
                            property :=
                              (_ :
                                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^
                                    m ∈
                                  𝒜 (m • i)) },
                        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                        den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
                  Submonoid.powers f) } *
          { val := f ^ i,
            property :=
              (_ :
                ↑{ deg := m * i,
                        num :=
                          { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                            property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                        den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
                  Submonoid.powers f) })
[PROOFSTEP]
congr 2
[GOAL]
case pos.e_a.e_x
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j) = ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) * ↑(proj 𝒜 i) b ^ m
[PROOFSTEP]
dsimp
[GOAL]
case pos.e_a.e_x
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ ↑(↑(↑(decompose 𝒜) a) i) ^ j * ↑(↑(↑(decompose 𝒜) b) i) ^ (m + m - j) =
    ↑(↑(↑(decompose 𝒜) a) i) ^ j * ↑(↑(↑(decompose 𝒜) b) i) ^ (m - j) * ↑(↑(↑(decompose 𝒜) b) i) ^ m
[PROOFSTEP]
rw [mul_assoc, ← pow_add, add_comm (m - j), Nat.add_sub_assoc h1]
[GOAL]
case pos.e_a.e_y
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ { val := f ^ (i + i),
      property :=
        (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                        property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) } *
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) b ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
simp_rw [pow_add]
[GOAL]
case pos.e_a.e_y
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : j ≤ m
⊢ { val := f ^ i * f ^ i, property := (_ : (fun x => x ∈ Submonoid.powers f) (f ^ i * f ^ i)) } =
    { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                        property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) } *
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) b ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
rfl
[GOAL]
case neg.e_a.e_x
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m + m - j) =
    ↑(proj 𝒜 i) a ^ m * (↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j))
[PROOFSTEP]
dsimp
[GOAL]
case neg.e_a.e_x
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ ↑(↑(↑(decompose 𝒜) a) i) ^ j * ↑(↑(↑(decompose 𝒜) b) i) ^ (m + m - j) =
    ↑(↑(↑(decompose 𝒜) a) i) ^ m * (↑(↑(↑(decompose 𝒜) a) i) ^ (j - m) * ↑(↑(↑(decompose 𝒜) b) i) ^ (m + m - j))
[PROOFSTEP]
rw [← mul_assoc, ← pow_add, Nat.add_sub_of_le (le_of_not_le h1)]
[GOAL]
case neg.e_a.e_y
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ { val := f ^ (i + i),
      property :=
        (_ : ↑{ val := f ^ (i + i), property := (_ : f ^ (i + i) ∈ 𝒜 (m * i + m * i)) } ∈ Submonoid.powers f) } =
    { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) } *
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                        property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
simp_rw [pow_add]
[GOAL]
case neg.e_a.e_y
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
a b : A
ha : a ∈ carrier f_deg q
hb : b ∈ carrier f_deg q
i : ℕ
g : ℕ → A⁰_ f :=
  fun j =>
    Nat.choose (m + m) j •
      if h2 : m + m < j then 0
      else
        if h1 : j ≤ m then
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ j * ↑(proj 𝒜 i) b ^ (m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) b ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) b) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
        else
          Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } *
            Quotient.mk''
              { deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                    property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
j : ℕ
hj : j ∈ range (m + m + 1)
h2 : ¬m + m < j
h1 : ¬j ≤ m
⊢ { val := f ^ i * f ^ i, property := (_ : (fun x => x ∈ Submonoid.powers f) (f ^ i * f ^ i)) } =
    { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) a) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) } *
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j),
                        property := (_ : ↑(proj 𝒜 i) a ^ (j - m) * ↑(proj 𝒜 i) b ^ (m + m - j) ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem := (_ : ∃ y, f ^ y = f ^ i) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) 0 ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert Submodule.zero_mem q.1 using 1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) 0 ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } =
    0
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.zero_val]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk
      ↑{ deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) 0 ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num
      {
        val :=
          ↑{ deg := m * i,
                num :=
                  { val := ↑(proj 𝒜 i) 0 ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                          𝒜 (m • i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) 0 ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
simp_rw [map_zero, zero_pow hm]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk 0
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := ↑(proj 𝒜 i) 0 ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) 0) ^ m ∈
                              𝒜 (m • i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
convert Localization.mk_zero (S := Submonoid.powers f) _ using 1
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
c x : A
hx : x ∈ carrier f_deg q
⊢ c • x ∈ carrier f_deg q
[PROOFSTEP]
revert c
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ ∀ (c : A), c • x ∈ carrier f_deg q
[PROOFSTEP]
refine' DirectSum.Decomposition.inductionOn 𝒜 _ _ _
[GOAL]
case refine'_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ 0 • x ∈ carrier f_deg q
[PROOFSTEP]
rw [zero_smul]
[GOAL]
case refine'_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ 0 ∈ carrier f_deg q
[PROOFSTEP]
exact carrier.zero_mem f_deg hm _
[GOAL]
case refine'_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ ∀ {i : ℕ} (m_1 : { x // x ∈ 𝒜 i }), ↑m_1 • x ∈ carrier f_deg q
[PROOFSTEP]
rintro n ⟨a, ha⟩ i
[GOAL]
case refine'_2.mk
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) (↑{ val := a, property := ha } • x) ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                        (↑{ val := a, property := ha } • x)) ^
                    m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
simp_rw [proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
  -- Porting note: having trouble with Mul instance
[GOAL]
case refine'_2.mk
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := (if n ≤ i then a * ↑(↑(↑(decompose 𝒜) x) (i - n)) else 0) ^ m,
            property :=
              (_ : (fun x => x ∈ 𝒜 (m * i)) ((if n ≤ i then a * ↑(↑(↑(decompose 𝒜) x) (i - n)) else 0) ^ m)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
let product : A⁰_ f :=
  Mul.mul (Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, ?_⟩, ⟨n, rfl⟩⟩ : A⁰_ f)
    (Quotient.mk'' ⟨_, ⟨proj 𝒜 (i - n) x ^ m, by mem_tac⟩, ⟨_, ?_⟩, ⟨i - n, rfl⟩⟩ : A⁰_ f)
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 ?m.1735966
[PROOFSTEP]
mem_tac
[GOAL]
case refine'_2.mk.refine_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := (if n ≤ i then a * ↑(↑(↑(decompose 𝒜) x) (i - n)) else 0) ^ m,
            property :=
              (_ : (fun x => x ∈ 𝒜 (m * i)) ((if n ≤ i then a * ↑(↑(↑(decompose 𝒜) x) (i - n)) else 0) ^ m)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
            property := (_ : (fun x => x ∈ 𝒜 (m * i)) ((a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert_to product ∈ q.1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
            property := (_ : (fun x => x ∈ 𝒜 (m * i)) ((a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } =
    product
[PROOFSTEP]
dsimp
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
            property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } =
    Mul.mul
      (Quotient.mk''
        { deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
          den := { val := f ^ n, property := ?refine'_2.mk.refine_1 }, den_mem := (_ : ∃ y, f ^ y = f ^ n) })
      (Quotient.mk''
        { deg := m * (i - n),
          num :=
            { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
              property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
          den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
          den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) })
[PROOFSTEP]
erw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.mul_val,
  HomogeneousLocalization.val_mk'', HomogeneousLocalization.val_mk'']
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk
      ↑{ deg := m * i,
            num :=
              { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
                property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.num
      {
        val :=
          ↑{ deg := m * i,
                num :=
                  { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
                    property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
                den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
                        property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    Localization.mk
        ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
              den := { val := f ^ n, property := ?refine'_2.mk.refine_1 }, den_mem := (_ : ∃ y, f ^ y = f ^ n) }.num
        {
          val :=
            ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
                  den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
                  den_mem := (_ : ∃ y, f ^ y = f ^ n) }.den,
          property :=
            (_ :
              ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
                      den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ n) }.den ∈
                Submonoid.powers f) } *
      Localization.mk
        ↑{ deg := m * (i - n),
              num :=
                { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                  property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
              den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
              den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.num
        {
          val :=
            ↑{ deg := m * (i - n),
                  num :=
                    { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                      property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
                  den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
                  den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.den,
          property :=
            (_ :
              ↑{ deg := m * (i - n),
                      num :=
                        { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                          property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
                      den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.den ∈
                Submonoid.powers f) }
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
simp_rw [mul_pow]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk (a ^ m * ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m)
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
                        property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    Localization.mk (a ^ m)
        { val := f ^ n,
          property :=
            (_ :
              ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
                      den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ n) }.den ∈
                Submonoid.powers f) } *
      Localization.mk (↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m)
        { val := f ^ (i - n),
          property :=
            (_ :
              ↑{ deg := m * (i - n),
                      num :=
                        { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                          property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
                      den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.den ∈
                Submonoid.powers f) }
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
rw [Localization.mk_mul]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ Localization.mk (a ^ m * ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m)
      { val := f ^ i,
        property :=
          (_ :
            ↑{ deg := m * i,
                    num :=
                      { val := (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m,
                        property := (_ : (a * ↑(↑(↑(decompose 𝒜) x) (i - n))) ^ m ∈ 𝒜 (m * i)) },
                    den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) }.den ∈
              Submonoid.powers f) } =
    Localization.mk (a ^ m * ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m)
      ({ val := f ^ n,
          property :=
            (_ :
              ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
                      den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ n) }.den ∈
                Submonoid.powers f) } *
        { val := f ^ (i - n),
          property :=
            (_ :
              ↑{ deg := m * (i - n),
                      num :=
                        { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                          property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
                      den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.den ∈
                Submonoid.powers f) })
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
congr
[GOAL]
case h.e'_4.h.e_y.e_val
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := ?refine'_2.mk.refine_1 }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
        den_mem :=
          (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := ?refine'_2.mk.refine_2 }) })
h : n ≤ i
e_1✝ : Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) = A⁰_ f
⊢ f ^ i =
    ↑{ val := f ^ n,
          property :=
            (_ :
              ↑{ deg := m * n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
                      den := { val := f ^ n, property := ?refine'_2.mk.refine_1 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ n) }.den ∈
                Submonoid.powers f) } *
      ↑{ val := f ^ (i - n),
          property :=
            (_ :
              ↑{ deg := m * (i - n),
                      num :=
                        { val := ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m,
                          property := (_ : ↑(↑(↑(decompose 𝒜) x) (i - n)) ^ m ∈ 𝒜 (m • (i - n))) },
                      den := { val := f ^ (i - n), property := ?refine'_2.mk.refine_2 },
                      den_mem := (_ : ∃ y, f ^ y = f ^ (i - n)) }.den ∈
                Submonoid.powers f) }
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
erw [← pow_add, Nat.add_sub_of_le h]
[GOAL]
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 (m • n)
[PROOFSTEP]
rw [(_ : m • n = _)]
[GOAL]
case refine'_2.mk.refine_1
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ n ∈ 𝒜 ?m.1761702
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ ℕ
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ m • n = ?m.1761702
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ m • n = n • m
[PROOFSTEP]
simp only [smul_eq_mul, mul_comm]
[GOAL]
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 (m • (i - n))
[PROOFSTEP]
rw [(_ : m • (i - n) = _)]
[GOAL]
case refine'_2.mk.refine_2
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ f ^ (i - n) ∈ 𝒜 ?m.1764150
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ ℕ
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ m • (i - n) = ?m.1764150
[PROOFSTEP]
mem_tac
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
⊢ m • (i - n) = (i - n) • m
[PROOFSTEP]
simp only [smul_eq_mul, mul_comm]
[GOAL]
case pos
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) }) })
h : n ≤ i
⊢ product ∈ q.asIdeal
[PROOFSTEP]
apply Ideal.mul_mem_left (α := A⁰_ f) _ _ (hx _)
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) }) })
h : ¬n ≤ i
⊢ Quotient.mk''
      { deg := m * i, num := { val := 0 ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * i)) (0 ^ m)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
simp_rw [zero_pow hm]
[GOAL]
case neg
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) }) })
h : ¬n ≤ i
⊢ Quotient.mk''
      { deg := m * i, num := { val := 0, property := (_ : (fun x => x ∈ 𝒜 (m * i)) 0) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert carrier.zero_mem f_deg hm q i
[GOAL]
case h.e'_4.h.e'_3.h.e'_10.h.e'_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
n : ℕ
a : A
ha : a ∈ 𝒜 n
i : ℕ
product : A⁰_ f :=
  Mul.mul
    (Quotient.mk''
      { deg := m • n, num := { val := a ^ m, property := (_ : a ^ m ∈ 𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m • n)) }) })
    (Quotient.mk''
      { deg := m • (i - n),
        num := { val := ↑(proj 𝒜 (i - n)) x ^ m, property := (_ : ↑(proj 𝒜 (i - n)) x ^ m ∈ 𝒜 (m • (i - n))) },
        den := { val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ (i - n), property := (_ : f ^ (i - n) ∈ 𝒜 (m • (i - n))) }) })
h : ¬n ≤ i
⊢ 0 = ↑(proj 𝒜 i) 0 ^ m
[PROOFSTEP]
rw [map_zero, zero_pow hm]
[GOAL]
case refine'_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ ∀ (m_1 m' : A), m_1 • x ∈ carrier f_deg q → m' • x ∈ carrier f_deg q → (m_1 + m') • x ∈ carrier f_deg q
[PROOFSTEP]
simp_rw [add_smul]
[GOAL]
case refine'_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x : A
hx : x ∈ carrier f_deg q
⊢ ∀ (m_1 m' : A), m_1 • x ∈ carrier f_deg q → m' • x ∈ carrier f_deg q → m_1 • x + m' • x ∈ carrier f_deg q
[PROOFSTEP]
exact fun _ _ => carrier.add_mem f_deg q
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
a : A
ha : a ∈ asIdeal f_deg hm q
j : ℕ
h : i = j
⊢ Quotient.mk''
      { deg := m * i,
        num :=
          { val := ↑(proj 𝒜 i) ↑(↑(↑(decompose 𝒜) a) i) ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                        ↑(↑(↑(decompose 𝒜) a) i)) ^
                    m ∈
                  𝒜 (m • i)) },
        den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
    q.asIdeal
[PROOFSTEP]
simpa only [proj_apply, decompose_coe, of_eq_same] using ha _
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
a : A
ha : a ∈ asIdeal f_deg hm q
j : ℕ
h : ¬i = j
⊢ Quotient.mk''
      { deg := m * j,
        num :=
          { val := ↑(proj 𝒜 j) ↑(↑(↑(decompose 𝒜) a) i) ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply j) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜)))
                        ↑(↑(↑(decompose 𝒜) a) i)) ^
                    m ∈
                  𝒜 (m • j)) },
        den := { val := f ^ j, property := (_ : f ^ j ∈ 𝒜 (m * j)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ j, property := (_ : f ^ j ∈ 𝒜 (m * j)) }) } ∈
    q.asIdeal
[PROOFSTEP]
simp only [proj_apply, decompose_of_mem_ne 𝒜 (Submodule.coe_mem (decompose 𝒜 a i)) h, zero_pow hm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
a : A
ha : a ∈ asIdeal f_deg hm q
j : ℕ
h : ¬i = j
⊢ Quotient.mk''
      { deg := m * j, num := { val := 0, property := (_ : (fun x => x ∈ 𝒜 (m * j)) 0) },
        den := { val := f ^ j, property := (_ : f ^ j ∈ 𝒜 (m * j)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ j, property := (_ : f ^ j ∈ 𝒜 (m * j)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert carrier.zero_mem f_deg hm q j
[GOAL]
case h.e'_4.h.e'_3.h.e'_10.h.e'_3
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
i : ℕ
a : A
ha : a ∈ asIdeal f_deg hm q
j : ℕ
h : ¬i = j
⊢ 0 = ↑(proj 𝒜 j) 0 ^ m
[PROOFSTEP]
rw [map_zero, zero_pow hm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
rid : f ∈ asIdeal f_deg hm q
⊢ 1 ∈ q.asIdeal
[PROOFSTEP]
convert rid m
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
rid : f ∈ asIdeal f_deg hm q
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ 1 =
    Quotient.mk''
      { deg := m * m,
        num :=
          { val := ↑(proj 𝒜 m) f ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply m) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) f) ^ m ∈
                  𝒜 (m • m)) },
        den := { val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.one_val, HomogeneousLocalization.val_mk'']
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
rid : f ∈ asIdeal f_deg hm q
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ 1 =
    Localization.mk
      ↑{ deg := m * m,
            num :=
              { val := ↑(proj 𝒜 m) f ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply m) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) f) ^ m ∈
                      𝒜 (m • m)) },
            den := { val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }.num
      {
        val :=
          ↑{ deg := m * m,
                num :=
                  { val := ↑(proj 𝒜 m) f ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply m) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) f) ^ m ∈
                          𝒜 (m • m)) },
                den := { val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * m,
                    num :=
                      { val := ↑(proj 𝒜 m) f ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply m) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) f) ^ m ∈
                              𝒜 (m • m)) },
                    den := { val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
dsimp
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
rid : f ∈ asIdeal f_deg hm q
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ 1 =
    Localization.mk (↑(↑(↑(decompose 𝒜) f) m) ^ m)
      { val := f ^ m,
        property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }
[PROOFSTEP]
simp_rw [decompose_of_mem_same _ f_deg]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
rid : f ∈ asIdeal f_deg hm q
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ 1 =
    Localization.mk (f ^ m)
      { val := f ^ m,
        property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ m, property := (_ : f ^ m ∈ 𝒜 (m * m)) }) }
[PROOFSTEP]
simp only [mk_eq_monoidOf_mk', Submonoid.LocalizationMap.mk'_self]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ (∀ (i : ℕ),
      Quotient.mk''
          { deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) x ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
        q.asIdeal) ∨
    ∀ (i : ℕ),
      Quotient.mk''
          { deg := m * i,
            num :=
              { val := ↑(proj 𝒜 i) y ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply i) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                      𝒜 (m • i)) },
            den := { val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ i, property := (_ : f ^ i ∈ 𝒜 (m * i)) }) } ∈
        q.asIdeal
[PROOFSTEP]
rw [← and_forall_ne nx, and_iff_left, ← and_forall_ne ny, and_iff_left]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ Quotient.mk''
        { deg := m * nx,
          num :=
            { val := ↑(proj 𝒜 nx) x ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply nx) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                    𝒜 (m • nx)) },
          den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) } ∈
      q.asIdeal ∨
    Quotient.mk''
        { deg := m * ny,
          num :=
            { val := ↑(proj 𝒜 ny) y ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply ny) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                    𝒜 (m • ny)) },
          den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) } ∈
      q.asIdeal
[PROOFSTEP]
apply q.2.mem_or_mem
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ Quotient.mk''
        { deg := m * nx,
          num :=
            { val := ↑(proj 𝒜 nx) x ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply nx) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                    𝒜 (m • nx)) },
          den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) } *
      Quotient.mk''
        { deg := m * ny,
          num :=
            { val := ↑(proj 𝒜 ny) y ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply ny) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                    𝒜 (m • ny)) },
          den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert hxy (nx + ny) using 1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ Quotient.mk''
        { deg := m * nx,
          num :=
            { val := ↑(proj 𝒜 nx) x ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply nx) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                    𝒜 (m • nx)) },
          den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) } *
      Quotient.mk''
        { deg := m * ny,
          num :=
            { val := ↑(proj 𝒜 ny) y ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply ny) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                    𝒜 (m • ny)) },
          den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) } =
    Quotient.mk''
      { deg := m * (nx + ny),
        num :=
          { val := ↑(proj 𝒜 (nx + ny)) (x * y) ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply (nx + ny)) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (x * y)) ^
                    m ∈
                  𝒜 (m • (nx + ny))) },
        den := { val := f ^ (nx + ny), property := (_ : f ^ (nx + ny) ∈ 𝒜 (m * (nx + ny))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y =
                ↑{ val := f ^ (nx + ny), property := (_ : f ^ (nx + ny) ∈ 𝒜 (m * (nx + ny))) }) }
[PROOFSTEP]
dsimp
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ Quotient.mk''
        { deg := m * nx,
          num :=
            { val := ↑(↑(↑(decompose 𝒜) x) nx) ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply nx) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                    𝒜 (m • nx)) },
          den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) } *
      Quotient.mk''
        { deg := m * ny,
          num :=
            { val := ↑(↑(↑(decompose 𝒜) y) ny) ^ m,
              property :=
                (_ :
                  ↑(↑(LinearMap.comp (DFinsupp.lapply ny) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                    𝒜 (m • ny)) },
          den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) } =
    Quotient.mk''
      { deg := m * (nx + ny),
        num :=
          { val := ↑(↑(↑(decompose 𝒜) (x * y)) (nx + ny)) ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply (nx + ny)) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) (x * y)) ^
                    m ∈
                  𝒜 (m • (nx + ny))) },
        den := { val := f ^ (nx + ny), property := (_ : f ^ (nx + ny) ∈ 𝒜 (m * (nx + ny))) },
        den_mem :=
          (_ :
            ∃ y,
              (fun x x_1 => x ^ x_1) f y =
                ↑{ val := f ^ (nx + ny), property := (_ : f ^ (nx + ny) ∈ 𝒜 (m * (nx + ny))) }) }
[PROOFSTEP]
simp_rw [decompose_of_mem_same 𝒜 hnx, decompose_of_mem_same 𝒜 hny,
  decompose_of_mem_same 𝒜 (SetLike.GradedMonoid.toGradedMul.mul_mem hnx hny), mul_pow, pow_add]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ Quotient.mk''
        { deg := m * nx, num := { val := x ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * nx)) (x ^ m)) },
          den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) } *
      Quotient.mk''
        { deg := m * ny, num := { val := y ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * ny)) (y ^ m)) },
          den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
          den_mem :=
            (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) } =
    Quotient.mk''
      { deg := m * (nx + ny),
        num := { val := x ^ m * y ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (x ^ m * y ^ m)) },
        den := { val := f ^ nx * f ^ ny, property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (f ^ nx * f ^ ny)) },
        den_mem :=
          (_ :
            ↑{ val := f ^ nx * f ^ ny, property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (f ^ nx * f ^ ny)) } ∈
              Submonoid.powers f) }
[PROOFSTEP]
simp only [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.mul_val,
  mk_mul]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
e_1✝ :
  ↑(CommRingCat.of (A⁰_ f)) =
    Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f)))
⊢ Localization.mk (x ^ m * y ^ m)
      ({ val := f ^ nx,
          property :=
            (_ :
              ↑{ deg := m * nx, num := { val := x ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * nx)) (x ^ m)) },
                      den := { val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y =
                              ↑{ val := f ^ nx, property := (_ : f ^ nx ∈ 𝒜 (m * nx)) }) }.den ∈
                Submonoid.powers f) } *
        { val := f ^ ny,
          property :=
            (_ :
              ↑{ deg := m * ny, num := { val := y ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * ny)) (y ^ m)) },
                      den := { val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) },
                      den_mem :=
                        (_ :
                          ∃ y,
                            (fun x x_1 => x ^ x_1) f y =
                              ↑{ val := f ^ ny, property := (_ : f ^ ny ∈ 𝒜 (m * ny)) }) }.den ∈
                Submonoid.powers f) }) =
    Localization.mk (x ^ m * y ^ m)
      { val := f ^ nx * f ^ ny,
        property :=
          (_ :
            ↑{ deg := m * (nx + ny),
                    num := { val := x ^ m * y ^ m, property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (x ^ m * y ^ m)) },
                    den :=
                      { val := f ^ nx * f ^ ny, property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (f ^ nx * f ^ ny)) },
                    den_mem :=
                      (_ :
                        ↑{ val := f ^ nx * f ^ ny,
                              property := (_ : (fun x => x ∈ 𝒜 (m * (nx + ny))) (f ^ nx * f ^ ny)) } ∈
                          Submonoid.powers f) }.den ∈
              Submonoid.powers f) }
[PROOFSTEP]
simp only [Submonoid.mk_mul_mk, mk_eq_monoidOf_mk']
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ ∀ (b : ℕ),
    b ≠ ny →
      Quotient.mk''
          { deg := m * b,
            num :=
              { val := ↑(proj 𝒜 b) y ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply b) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                      𝒜 (m • b)) },
            den := { val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) }) } ∈
        q.asIdeal
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ ∀ (b : ℕ),
    b ≠ nx →
      Quotient.mk''
          { deg := m * b,
            num :=
              { val := ↑(proj 𝒜 b) x ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply b) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                      𝒜 (m • b)) },
            den := { val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) }) } ∈
        q.asIdeal
[PROOFSTEP]
all_goals
  intro n hn; convert q.1.zero_mem using 1
  rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.zero_val];
  simp_rw [proj_apply]
  convert mk_zero (S := Submonoid.powers f) _
  rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
  ·
    first
    | exact hnx
    | exact hny
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ ∀ (b : ℕ),
    b ≠ ny →
      Quotient.mk''
          { deg := m * b,
            num :=
              { val := ↑(proj 𝒜 b) y ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply b) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                      𝒜 (m • b)) },
            den := { val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) }) } ∈
        q.asIdeal
[PROOFSTEP]
intro n hn
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
⊢ Quotient.mk''
      { deg := m * n,
        num :=
          { val := ↑(proj 𝒜 n) y ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                  𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert q.1.zero_mem using 1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Quotient.mk''
      { deg := m * n,
        num :=
          { val := ↑(proj 𝒜 n) y ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                  𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) } =
    0
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.zero_val]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk
      ↑{ deg := m * n,
            num :=
              { val := ↑(proj 𝒜 n) y ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                      𝒜 (m • n)) },
            den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.num
      {
        val :=
          ↑{ deg := m * n,
                num :=
                  { val := ↑(proj 𝒜 n) y ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                          𝒜 (m • n)) },
                den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * n,
                    num :=
                      { val := ↑(proj 𝒜 n) y ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                              𝒜 (m • n)) },
                    den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
simp_rw [proj_apply]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk (↑(↑(↑(decompose 𝒜) y) n) ^ m)
      { val := f ^ n,
        property :=
          (_ :
            ↑{ deg := m * n,
                    num :=
                      { val := ↑(proj 𝒜 n) y ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) y) ^ m ∈
                              𝒜 (m • n)) },
                    den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
convert mk_zero (S := Submonoid.powers f) _
[GOAL]
case h.e'_2.h.e'_4
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ ↑(↑(↑(decompose 𝒜) y) n) ^ m = 0
[PROOFSTEP]
rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ y ∈ 𝒜 ny
[PROOFSTEP]
first
| exact hnx
| exact hny
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ y ∈ 𝒜 ny
[PROOFSTEP]
exact hnx
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ ny
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ y ∈ 𝒜 ny
[PROOFSTEP]
exact hny
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
⊢ ∀ (b : ℕ),
    b ≠ nx →
      Quotient.mk''
          { deg := m * b,
            num :=
              { val := ↑(proj 𝒜 b) x ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply b) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                      𝒜 (m • b)) },
            den := { val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ b, property := (_ : f ^ b ∈ 𝒜 (m * b)) }) } ∈
        q.asIdeal
[PROOFSTEP]
intro n hn
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
⊢ Quotient.mk''
      { deg := m * n,
        num :=
          { val := ↑(proj 𝒜 n) x ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                  𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) } ∈
    q.asIdeal
[PROOFSTEP]
convert q.1.zero_mem using 1
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Quotient.mk''
      { deg := m * n,
        num :=
          { val := ↑(proj 𝒜 n) x ^ m,
            property :=
              (_ :
                ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                  𝒜 (m • n)) },
        den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
        den_mem := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) } =
    0
[PROOFSTEP]
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'', HomogeneousLocalization.zero_val]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk
      ↑{ deg := m * n,
            num :=
              { val := ↑(proj 𝒜 n) x ^ m,
                property :=
                  (_ :
                    ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                      𝒜 (m • n)) },
            den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
            den_mem :=
              (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.num
      {
        val :=
          ↑{ deg := m * n,
                num :=
                  { val := ↑(proj 𝒜 n) x ^ m,
                    property :=
                      (_ :
                        ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                          𝒜 (m • n)) },
                den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                den_mem :=
                  (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den,
        property :=
          (_ :
            ↑{ deg := m * n,
                    num :=
                      { val := ↑(proj 𝒜 n) x ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                              𝒜 (m • n)) },
                    den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
simp_rw [proj_apply]
[GOAL]
case h.e'_4.h
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ Localization.mk (↑(↑(↑(decompose 𝒜) x) n) ^ m)
      { val := f ^ n,
        property :=
          (_ :
            ↑{ deg := m * n,
                    num :=
                      { val := ↑(proj 𝒜 n) x ^ m,
                        property :=
                          (_ :
                            ↑(↑(LinearMap.comp (DFinsupp.lapply n) (AlgHom.toLinearMap ↑(decomposeAlgEquiv 𝒜))) x) ^ m ∈
                              𝒜 (m • n)) },
                    den := { val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) },
                    den_mem :=
                      (_ :
                        ∃ y,
                          (fun x x_1 => x ^ x_1) f y = ↑{ val := f ^ n, property := (_ : f ^ n ∈ 𝒜 (m * n)) }) }.den ∈
              Submonoid.powers f) } =
    0
[PROOFSTEP]
convert mk_zero (S := Submonoid.powers f) _
[GOAL]
case h.e'_2.h.e'_4
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ ↑(↑(↑(decompose 𝒜) x) n) ^ m = 0
[PROOFSTEP]
rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ x ∈ 𝒜 nx
[PROOFSTEP]
first
| exact hnx
| exact hny
[GOAL]
R : Type u_1
A : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
m : ℕ
f_deg : f ∈ 𝒜 m
hm : 0 < m
q : ↑↑(Spec A⁰_ f).toSheafedSpace.toPresheafedSpace
x y : A
x✝¹ : Homogeneous 𝒜 x
x✝ : Homogeneous 𝒜 y
hxy : x * y ∈ asIdeal f_deg hm q
nx : ℕ
hnx : x ∈ 𝒜 nx
ny : ℕ
hny : y ∈ 𝒜 ny
n : ℕ
hn : n ≠ nx
e_1✝ :
  Quotient (Setoid.ker (HomogeneousLocalization.NumDenSameDeg.embedding 𝒜 (Submonoid.powers f))) =
    ↑(CommRingCat.of (A⁰_ f))
⊢ x ∈ 𝒜 nx
[PROOFSTEP]
exact hnx
