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

tactic: apply TopologicalSpace.isTopologicalBasis_of_open_of_nhds
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 𝒜
⊢ IsTopologicalBasis (Set.range fun r => ↑(basicOpen 𝒜 r))

tactic: rintro _ ⟨r, rfl⟩
state_before: case h_open
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
⊢ ∀ (u : Set (ProjectiveSpectrum 𝒜)), (u ∈ Set.range fun r => ↑(basicOpen 𝒜 r)) → IsOpen u

tactic: exact isOpen_basicOpen 𝒜
state_before: case h_open.intro
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
r : A
⊢ IsOpen ((fun r => ↑(basicOpen 𝒜 r)) r)

tactic: rintro p U hp ⟨s, hs⟩
state_before: case h_nhds
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
⊢ ∀ (a : ProjectiveSpectrum 𝒜) (u : Set (ProjectiveSpectrum 𝒜)),
    a ∈ u → IsOpen u → ∃ v, (v ∈ Set.range fun r => ↑(basicOpen 𝒜 r)) ∧ a ∈ v ∧ v ⊆ u

tactic: rw [← compl_compl U, Set.mem_compl_iff, ← hs, mem_zeroLocus, Set.not_subset] at hp
state_before: case h_nhds.intro
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
p : ProjectiveSpectrum 𝒜
U : Set (ProjectiveSpectrum 𝒜)
hp : p ∈ U
s : Set A
hs : zeroLocus 𝒜 s = Uᶜ
⊢ ∃ v, (v ∈ Set.range fun r => ↑(basicOpen 𝒜 r)) ∧ p ∈ v ∧ v ⊆ U

tactic: obtain ⟨f, hfs, hfp⟩ := hp
state_before: case h_nhds.intro
R : Type u_2
A : Type u_1
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
p : ProjectiveSpectrum 𝒜
U : Set (ProjectiveSpectrum 𝒜)
s : Set A
hp : ∃ a, a ∈ s ∧ ¬a ∈ ↑p.asHomogeneousIdeal
hs : zeroLocus 𝒜 s = Uᶜ
⊢ ∃ v, (v ∈ Set.range fun r => ↑(basicOpen 𝒜 r)) ∧ p ∈ v ∧ v ⊆ U

tactic: refine' ⟨basicOpen 𝒜 f, ⟨f, rfl⟩, hfp, _⟩
state_before: case h_nhds.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 𝒜
p : ProjectiveSpectrum 𝒜
U : Set (ProjectiveSpectrum 𝒜)
s : Set A
hs : zeroLocus 𝒜 s = Uᶜ
f : A
hfs : f ∈ s
hfp : ¬f ∈ ↑p.asHomogeneousIdeal
⊢ ∃ v, (v ∈ Set.range fun r => ↑(basicOpen 𝒜 r)) ∧ p ∈ v ∧ v ⊆ U

tactic: rw [← Set.compl_subset_compl, ← hs, basicOpen_eq_zeroLocus_compl, compl_compl]
state_before: case h_nhds.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 𝒜
p : ProjectiveSpectrum 𝒜
U : Set (ProjectiveSpectrum 𝒜)
s : Set A
hs : zeroLocus 𝒜 s = Uᶜ
f : A
hfs : f ∈ s
hfp : ¬f ∈ ↑p.asHomogeneousIdeal
⊢ ↑(basicOpen 𝒜 f) ⊆ U

tactic: exact zeroLocus_anti_mono 𝒜 (Set.singleton_subset_iff.mpr hfs)
state_before: case h_nhds.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 𝒜
p : ProjectiveSpectrum 𝒜
U : Set (ProjectiveSpectrum 𝒜)
s : Set A
hs : zeroLocus 𝒜 s = Uᶜ
f : A
hfs : f ∈ s
hfp : ¬f ∈ ↑p.asHomogeneousIdeal
⊢ zeroLocus 𝒜 s ⊆ zeroLocus 𝒜 {f}