Theorem: ProjectiveSpectrum.basicOpen_eq_union_of_projection
File: Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Topology.lean

tactic: erw [mem_coe_basicOpen, TopologicalSpace.Opens.mem_sSup]
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
⊢ z ∈ ↑(basicOpen 𝒜 f) ↔ z ∈ ↑(⨆ (i : ℕ), basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f))

tactic: constructor <;> intro hz
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
⊢ ¬f ∈ z.asHomogeneousIdeal ↔ ∃ u, (u ∈ Set.range fun i => basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)) ∧ z ∈ u

tactic: rcases show ∃ i, GradedAlgebra.proj 𝒜 i f ∉ z.asHomogeneousIdeal by
  contrapose! hz with H
  classical
  rw [← DirectSum.sum_support_decompose 𝒜 f]
  apply Ideal.sum_mem _ fun i _ => H i with ⟨i, hi⟩
state_before: case mp
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
hz : ¬f ∈ z.asHomogeneousIdeal
⊢ ∃ u, (u ∈ Set.range fun i => basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)) ∧ z ∈ u

tactic: exact ⟨basicOpen 𝒜 (GradedAlgebra.proj 𝒜 i f), ⟨i, rfl⟩, by rwa [mem_basicOpen]⟩
state_before: case mp.intro
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
hz : ¬f ∈ z.asHomogeneousIdeal
i : ℕ
hi : ¬↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal
⊢ ∃ u, (u ∈ Set.range fun i => basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)) ∧ z ∈ u

tactic: contrapose! hz with H
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
hz : ¬f ∈ z.asHomogeneousIdeal
⊢ ∃ i, ¬↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal

tactic: classical
rw [← DirectSum.sum_support_decompose 𝒜 f]
apply Ideal.sum_mem _ fun i _ => H i
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
H : ∀ (i : ℕ), ↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal
⊢ f ∈ z.asHomogeneousIdeal

tactic: rw [← DirectSum.sum_support_decompose 𝒜 f]
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
H : ∀ (i : ℕ), ↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal
⊢ f ∈ z.asHomogeneousIdeal

tactic: apply Ideal.sum_mem _ fun i _ => H i
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
H : ∀ (i : ℕ), ↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal
⊢ ∑ i in Dfinsupp.support (↑(decompose 𝒜) f), ↑(↑(↑(decompose 𝒜) f) i) ∈ z.asHomogeneousIdeal

tactic: rwa [mem_basicOpen]
state_before: R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
hz : ¬f ∈ z.asHomogeneousIdeal
i : ℕ
hi : ¬↑(GradedAlgebra.proj 𝒜 i) f ∈ z.asHomogeneousIdeal
⊢ z ∈ basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)

tactic: obtain ⟨_, ⟨i, rfl⟩, hz⟩ := hz
state_before: case mpr
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
hz : ∃ u, (u ∈ Set.range fun i => basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)) ∧ z ∈ u
⊢ ¬f ∈ z.asHomogeneousIdeal

tactic: exact fun rid => hz (z.1.2 i rid)
state_before: case mpr.intro.intro.intro
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
z : ProjectiveSpectrum 𝒜
i : ℕ
hz : z ∈ (fun i => basicOpen 𝒜 (↑(GradedAlgebra.proj 𝒜 i) f)) i
⊢ ¬f ∈ z.asHomogeneousIdeal