algebraic_geometry.prime_spectrum.basic
⟷
Mathlib.AlgebraicGeometry.PrimeSpectrum.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -8,7 +8,7 @@ import LinearAlgebra.Finsupp
import RingTheory.Ideal.Over
import RingTheory.Ideal.Prod
import RingTheory.Localization.Away.Basic
-import RingTheory.Nilpotent
+import RingTheory.Nilpotent.Defs
import Topology.Sets.Closeds
import Topology.Sober
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-/
-import Algebra.PunitInstances
+import Algebra.PUnitInstances
import LinearAlgebra.Finsupp
import RingTheory.Ideal.Over
import RingTheory.Ideal.Prod
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -925,7 +925,7 @@ theorem isClosed_range_comap_of_surjective (hf : Surjective f) : IsClosed (Set.r
theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbedding (comap f) :=
{ induced := (comap_inducing_of_surjective S f hf).induced
inj := comap_injective_of_surjective f hf
- closed_range := isClosed_range_comap_of_surjective S f hf }
+ isClosed_range := isClosed_range_comap_of_surjective S f hf }
#align prime_spectrum.closed_embedding_comap_of_surjective PrimeSpectrum.closedEmbedding_comap_of_surjective
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -105,7 +105,7 @@ noncomputable def primeSpectrumProd :
(by
constructor
· rintro (⟨I, hI⟩ | ⟨J, hJ⟩) (⟨I', hI'⟩ | ⟨J', hJ'⟩) h <;>
- simp only [Ideal.prod.ext_iff, prime_spectrum_prod_of_sum] at h
+ simp only [Ideal.prod.ext_iff, prime_spectrum_prod_of_sum] at h
· simp only [h]
· exact False.elim (hI.ne_top h.left)
· exact False.elim (hJ.ne_top h.right)
@@ -349,7 +349,7 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
by
rw [Set.eq_empty_iff_forall_not_mem]
intro x hx
- rw [mem_zero_locus] at hx
+ rw [mem_zero_locus] at hx
have x_prime : x.as_ideal.is_prime := by infer_instance
have eq_top : x.as_ideal = ⊤ := by rw [Ideal.eq_top_iff_one]; exact hx h
apply x_prime.ne_top eq_top
@@ -487,7 +487,7 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
intro r
rw [Submodule.mem_sup, mem_vanishing_ideal]
rintro ⟨f, hf, g, hg, rfl⟩ x ⟨hxt, hxt'⟩
- rw [mem_vanishing_ideal] at hf hg
+ rw [mem_vanishing_ideal] at hf hg
apply Submodule.add_mem <;> solve_by_elim
#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_le
-/
@@ -555,7 +555,7 @@ theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
by
refine' (is_closed_iff_zero_locus _).trans ⟨fun h => _, fun h => _⟩
· obtain ⟨s, hs⟩ := h
- rw [eq_comm, Set.eq_singleton_iff_unique_mem] at hs
+ rw [eq_comm, Set.eq_singleton_iff_unique_mem] at hs
refine'
⟨⟨x.2.1, fun I hI =>
Classical.not_not.1
@@ -577,8 +577,8 @@ theorem zeroLocus_vanishingIdeal_eq_closure (t : Set (PrimeSpectrum R)) :
by
apply Set.Subset.antisymm
· rintro x hx t' ⟨ht', ht⟩
- obtain ⟨fs, rfl⟩ : ∃ s, t' = zero_locus s := by rwa [is_closed_iff_zero_locus] at ht'
- rw [subset_zero_locus_iff_subset_vanishing_ideal] at ht
+ obtain ⟨fs, rfl⟩ : ∃ s, t' = zero_locus s := by rwa [is_closed_iff_zero_locus] at ht'
+ rw [subset_zero_locus_iff_subset_vanishing_ideal] at ht
exact Set.Subset.trans ht hx
· rw [(is_closed_zero_locus _).closure_subset_iff]
exact subset_zero_locus_vanishing_ideal t
@@ -827,8 +827,8 @@ theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocaliza
by
intro p q h
replace h := congr_arg (fun x : PrimeSpectrum R => Ideal.map (algebraMap R S) x.asIdeal) h
- dsimp only at h
- erw [IsLocalization.map_comap M S, IsLocalization.map_comap M S] at h
+ dsimp only at h
+ erw [IsLocalization.map_comap M S, IsLocalization.map_comap M S] at h
ext1
exact h
#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injective
@@ -1021,7 +1021,7 @@ theorem isTopologicalBasis_basic_opens :
· rintro _ ⟨r, rfl⟩
exact is_open_basic_open
· rintro p U hp ⟨s, hs⟩
- rw [← compl_compl U, Set.mem_compl_iff, ← hs, mem_zero_locus, Set.not_subset] at hp
+ rw [← compl_compl U, Set.mem_compl_iff, ← hs, mem_zero_locus, Set.not_subset] at hp
obtain ⟨f, hfs, hfp⟩ := hp
refine' ⟨basic_open f, ⟨f, rfl⟩, hfp, _⟩
rw [← Set.compl_subset_compl, ← hs, basic_open_eq_zero_locus_compl, compl_compl]
@@ -1046,7 +1046,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
have hI : ∀ i, Z i = zero_locus (I i) := fun i => by
simpa only [zero_locus_vanishing_ideal_eq_closure] using (hZc i).closure_eq.symm
rw [basic_open_eq_zero_locus_compl f, Set.inter_comm, ← Set.diff_eq, Set.diff_eq_empty,
- funext hI, ← zero_locus_supr] at hZ
+ funext hI, ← zero_locus_supr] at hZ
obtain ⟨n, hn⟩ : f ∈ (⨆ i : ι, I i).radical :=
by
rw [← vanishing_ideal_zero_locus_eq_radical]
@@ -1179,7 +1179,7 @@ def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
(by
rintro ⟨a, ha⟩
rw [← PrimeSpectrum.le_iff_specializes, ← as_ideal_le_as_ideal, ← SetLike.coe_subset_coe, ←
- Set.compl_subset_compl] at h
+ Set.compl_subset_compl] at h
exact (IsLocalization.map_units _ ⟨a, show a ∈ x.as_ideal.prime_compl from h ha⟩ : _))
#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializes
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1017,7 +1017,7 @@ theorem isTopologicalBasis_basic_opens :
TopologicalSpace.IsTopologicalBasis
(Set.range fun r : R => (basicOpen r : Set (PrimeSpectrum R))) :=
by
- apply TopologicalSpace.isTopologicalBasis_of_open_of_nhds
+ apply TopologicalSpace.isTopologicalBasis_of_isOpen_of_nhds
· rintro _ ⟨r, rfl⟩
exact is_open_basic_open
· rintro p U hp ⟨s, hs⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -675,7 +675,7 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
refine' fun h x y h' => h _ _ _
rw [← hI.radical_le_iff] at h' ⊢
simpa only [Ideal.radical_inf, Ideal.radical_mul] using h'
- · simp_rw [or_iff_not_imp_left, SetLike.not_le_iff_exists]
+ · simp_rw [Classical.or_iff_not_imp_left, SetLike.not_le_iff_exists]
rintro h s t h' ⟨x, hx, hx'⟩ y hy
exact h (h' ⟨Ideal.mul_mem_right _ _ hx, Ideal.mul_mem_left _ _ hy⟩) hx'
#align prime_spectrum.is_irreducible_zero_locus_iff_of_radical PrimeSpectrum.isIrreducible_zeroLocus_iff_of_radical
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -79,12 +79,10 @@ instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
let ⟨I, hI⟩ := Ideal.exists_maximal R
⟨⟨I, hI.IsPrime⟩⟩
-#print PrimeSpectrum.punit /-
/-- The prime spectrum of the zero ring is empty. -/
-theorem punit (x : PrimeSpectrum PUnit) : False :=
+theorem pUnit (x : PrimeSpectrum PUnit) : False :=
x.1.ne_top_iff_one.1 x.2.1 <| Subsingleton.elim (0 : PUnit) 1 ▸ x.1.zero_mem
-#align prime_spectrum.punit PrimeSpectrum.punit
--/
+#align prime_spectrum.punit PrimeSpectrum.pUnit
variable (R S)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,14 +3,14 @@ Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-/
-import Mathbin.Algebra.PunitInstances
-import Mathbin.LinearAlgebra.Finsupp
-import Mathbin.RingTheory.Ideal.Over
-import Mathbin.RingTheory.Ideal.Prod
-import Mathbin.RingTheory.Localization.Away.Basic
-import Mathbin.RingTheory.Nilpotent
-import Mathbin.Topology.Sets.Closeds
-import Mathbin.Topology.Sober
+import Algebra.PunitInstances
+import LinearAlgebra.Finsupp
+import RingTheory.Ideal.Over
+import RingTheory.Ideal.Prod
+import RingTheory.Localization.Away.Basic
+import RingTheory.Nilpotent
+import Topology.Sets.Closeds
+import Topology.Sober
#align_import algebraic_geometry.prime_spectrum.basic from "leanprover-community/mathlib"@"a87d22575d946e1e156fc1edd1e1269600a8a282"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ffde2d8a6e689149e44fd95fa862c23a57f8c780
@@ -79,11 +79,11 @@ instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
let ⟨I, hI⟩ := Ideal.exists_maximal R
⟨⟨I, hI.IsPrime⟩⟩
-#print PrimeSpectrum.pUnit /-
+#print PrimeSpectrum.punit /-
/-- The prime spectrum of the zero ring is empty. -/
-theorem pUnit (x : PrimeSpectrum PUnit) : False :=
+theorem punit (x : PrimeSpectrum PUnit) : False :=
x.1.ne_top_iff_one.1 x.2.1 <| Subsingleton.elim (0 : PUnit) 1 ▸ x.1.zero_mem
-#align prime_spectrum.punit PrimeSpectrum.pUnit
+#align prime_spectrum.punit PrimeSpectrum.punit
-/
variable (R S)
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -808,7 +808,7 @@ variable (S)
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
constructor
- rw [topologicalSpace_eq_iff]
+ rw [TopologicalSpace.ext_iff]
intro U
simp_rw [← isClosed_compl_iff]
generalize Uᶜ = Z
@@ -871,7 +871,7 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
{
induced :=
by
- simp_rw [topologicalSpace_eq_iff, ← isClosed_compl_iff, isClosed_induced_iff,
+ simp_rw [TopologicalSpace.ext_iff, ← isClosed_compl_iff, isClosed_induced_iff,
is_closed_iff_zero_locus]
refine' fun s =>
⟨fun ⟨F, hF⟩ =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -853,7 +853,7 @@ theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization
rintro ⟨p, rfl⟩ x ⟨hx₁, hx₂⟩
exact (p.2.1 : ¬_) (p.as_ideal.eq_top_of_is_unit_mem hx₂ (IsLocalization.map_units S ⟨x, hx₁⟩))
· intro h
- use ⟨x.as_ideal.map (algebraMap R S), IsLocalization.isPrime_of_isPrime_disjoint M S _ x.2 h⟩
+ use⟨x.as_ideal.map (algebraMap R S), IsLocalization.isPrime_of_isPrime_disjoint M S _ x.2 h⟩
ext1
exact IsLocalization.comap_map_of_isPrime_disjoint M S _ x.2 h
#align prime_spectrum.localization_comap_range PrimeSpectrum.localization_comap_range
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module algebraic_geometry.prime_spectrum.basic
-! leanprover-community/mathlib commit a87d22575d946e1e156fc1edd1e1269600a8a282
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.PunitInstances
import Mathbin.LinearAlgebra.Finsupp
@@ -17,6 +12,8 @@ import Mathbin.RingTheory.Nilpotent
import Mathbin.Topology.Sets.Closeds
import Mathbin.Topology.Sober
+#align_import algebraic_geometry.prime_spectrum.basic from "leanprover-community/mathlib"@"a87d22575d946e1e156fc1edd1e1269600a8a282"
+
/-!
# Prime spectrum of a commutative ring
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -800,7 +800,7 @@ theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegra
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
(isClosed_singleton_iff_isMaximal _).2
- (Ideal.isMaximal_comap_of_isIntegral_of_is_maximal' f hf x.asIdeal <|
+ (Ideal.isMaximal_comap_of_isIntegral_of_isMaximal' f hf x.asIdeal <|
(isClosed_singleton_iff_isMaximal x).1 hx)
#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegral
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -91,13 +91,16 @@ theorem pUnit (x : PrimeSpectrum PUnit) : False :=
variable (R S)
+#print PrimeSpectrum.primeSpectrumProdOfSum /-
/-- The map from the direct sum of prime spectra to the prime spectrum of a direct product. -/
@[simp]
def primeSpectrumProdOfSum : Sum (PrimeSpectrum R) (PrimeSpectrum S) → PrimeSpectrum (R × S)
| Sum.inl ⟨I, hI⟩ => ⟨Ideal.prod I ⊤, Ideal.isPrime_ideal_prod_top⟩
| Sum.inr ⟨J, hJ⟩ => ⟨Ideal.prod ⊤ J, Ideal.isPrime_ideal_prod_top'⟩
#align prime_spectrum.prime_spectrum_prod_of_sum PrimeSpectrum.primeSpectrumProdOfSum
+-/
+#print PrimeSpectrum.primeSpectrumProd /-
/-- The prime spectrum of `R × S` is in bijection with the disjoint unions of the prime spectrum of
`R` and the prime spectrum of `S`. -/
noncomputable def primeSpectrumProd :
@@ -117,18 +120,23 @@ noncomputable def primeSpectrumProd :
· exact ⟨Sum.inl ⟨p, hp⟩, rfl⟩
· exact ⟨Sum.inr ⟨p, hp⟩, rfl⟩)
#align prime_spectrum.prime_spectrum_prod PrimeSpectrum.primeSpectrumProd
+-/
variable {R S}
+#print PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal /-
@[simp]
theorem primeSpectrumProd_symm_inl_asIdeal (x : PrimeSpectrum R) :
((primeSpectrumProd R S).symm <| Sum.inl x).asIdeal = Ideal.prod x.asIdeal ⊤ := by cases x; rfl
#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal
+-/
+#print PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal /-
@[simp]
theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
((primeSpectrumProd R S).symm <| Sum.inr x).asIdeal = Ideal.prod ⊤ x.asIdeal := by cases x; rfl
#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal
+-/
#print PrimeSpectrum.zeroLocus /-
/-- The zero locus of a set `s` of elements of a commutative ring `R` is the set of all prime ideals
@@ -197,23 +205,28 @@ theorem vanishingIdeal_singleton (x : PrimeSpectrum R) :
#align prime_spectrum.vanishing_ideal_singleton PrimeSpectrum.vanishingIdeal_singleton
-/
+#print PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdeal /-
theorem subset_zeroLocus_iff_le_vanishingIdeal (t : Set (PrimeSpectrum R)) (I : Ideal R) :
t ⊆ zeroLocus I ↔ I ≤ vanishingIdeal t :=
⟨fun h f k => (mem_vanishingIdeal _ _).mpr fun x j => (mem_zeroLocus _ _).mpr (h j) k, fun h =>
fun x j => (mem_zeroLocus _ _).mpr (le_trans h fun f h => ((mem_vanishingIdeal _ _).mp h) x j)⟩
#align prime_spectrum.subset_zero_locus_iff_le_vanishing_ideal PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdeal
+-/
section Gc
variable (R)
+#print PrimeSpectrum.gc /-
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc :
@GaloisConnection (Ideal R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun I => zeroLocus I) fun t =>
vanishingIdeal t :=
fun I t => subset_zeroLocus_iff_le_vanishingIdeal t I
#align prime_spectrum.gc PrimeSpectrum.gc
+-/
+#print PrimeSpectrum.gc_set /-
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc_set :
@GaloisConnection (Set R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun s => zeroLocus s) fun t =>
@@ -222,6 +235,7 @@ theorem gc_set :
have ideal_gc : GaloisConnection Ideal.span coe := (Submodule.gi R R).gc
simpa [zero_locus_span, Function.comp] using ideal_gc.compose (gc R)
#align prime_spectrum.gc_set PrimeSpectrum.gc_set
+-/
#print PrimeSpectrum.subset_zeroLocus_iff_subset_vanishingIdeal /-
theorem subset_zeroLocus_iff_subset_vanishingIdeal (t : Set (PrimeSpectrum R)) (s : Set R) :
@@ -238,9 +252,11 @@ theorem subset_vanishingIdeal_zeroLocus (s : Set R) : s ⊆ vanishingIdeal (zero
#align prime_spectrum.subset_vanishing_ideal_zero_locus PrimeSpectrum.subset_vanishingIdeal_zeroLocus
-/
+#print PrimeSpectrum.le_vanishingIdeal_zeroLocus /-
theorem le_vanishingIdeal_zeroLocus (I : Ideal R) : I ≤ vanishingIdeal (zeroLocus I) :=
(gc R).le_u_l I
#align prime_spectrum.le_vanishing_ideal_zero_locus PrimeSpectrum.le_vanishingIdeal_zeroLocus
+-/
#print PrimeSpectrum.vanishingIdeal_zeroLocus_eq_radical /-
@[simp]
@@ -273,16 +289,21 @@ theorem zeroLocus_anti_mono {s t : Set R} (h : s ⊆ t) : zeroLocus t ⊆ zeroLo
#align prime_spectrum.zero_locus_anti_mono PrimeSpectrum.zeroLocus_anti_mono
-/
+#print PrimeSpectrum.zeroLocus_anti_mono_ideal /-
theorem zeroLocus_anti_mono_ideal {s t : Ideal R} (h : s ≤ t) :
zeroLocus (t : Set R) ⊆ zeroLocus (s : Set R) :=
(gc R).monotone_l h
#align prime_spectrum.zero_locus_anti_mono_ideal PrimeSpectrum.zeroLocus_anti_mono_ideal
+-/
+#print PrimeSpectrum.vanishingIdeal_anti_mono /-
theorem vanishingIdeal_anti_mono {s t : Set (PrimeSpectrum R)} (h : s ⊆ t) :
vanishingIdeal t ≤ vanishingIdeal s :=
(gc R).monotone_u h
#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_mono
+-/
+#print PrimeSpectrum.zeroLocus_subset_zeroLocus_iff /-
theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
zeroLocus (I : Set R) ⊆ zeroLocus (J : Set R) ↔ J ≤ I.radical :=
⟨fun h =>
@@ -291,6 +312,7 @@ theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
vanishingIdeal_zeroLocus_eq_radical J ▸ vanishingIdeal_anti_mono h),
fun h => zeroLocus_radical I ▸ zeroLocus_anti_mono_ideal h⟩
#align prime_spectrum.zero_locus_subset_zero_locus_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_iff
+-/
#print PrimeSpectrum.zeroLocus_subset_zeroLocus_singleton_iff /-
theorem zeroLocus_subset_zeroLocus_singleton_iff (f g : R) :
@@ -300,14 +322,18 @@ theorem zeroLocus_subset_zeroLocus_singleton_iff (f g : R) :
#align prime_spectrum.zero_locus_subset_zero_locus_singleton_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_singleton_iff
-/
+#print PrimeSpectrum.zeroLocus_bot /-
theorem zeroLocus_bot : zeroLocus ((⊥ : Ideal R) : Set R) = Set.univ :=
(gc R).l_bot
#align prime_spectrum.zero_locus_bot PrimeSpectrum.zeroLocus_bot
+-/
+#print PrimeSpectrum.zeroLocus_singleton_zero /-
@[simp]
theorem zeroLocus_singleton_zero : zeroLocus ({0} : Set R) = Set.univ :=
zeroLocus_bot
#align prime_spectrum.zero_locus_singleton_zero PrimeSpectrum.zeroLocus_singleton_zero
+-/
#print PrimeSpectrum.zeroLocus_empty /-
@[simp]
@@ -316,11 +342,14 @@ theorem zeroLocus_empty : zeroLocus (∅ : Set R) = Set.univ :=
#align prime_spectrum.zero_locus_empty PrimeSpectrum.zeroLocus_empty
-/
+#print PrimeSpectrum.vanishingIdeal_univ /-
@[simp]
theorem vanishingIdeal_univ : vanishingIdeal (∅ : Set (PrimeSpectrum R)) = ⊤ := by
simpa using (gc R).u_top
#align prime_spectrum.vanishing_ideal_univ PrimeSpectrum.vanishingIdeal_univ
+-/
+#print PrimeSpectrum.zeroLocus_empty_of_one_mem /-
theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s = ∅ :=
by
rw [Set.eq_empty_iff_forall_not_mem]
@@ -330,12 +359,16 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
have eq_top : x.as_ideal = ⊤ := by rw [Ideal.eq_top_iff_one]; exact hx h
apply x_prime.ne_top eq_top
#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_mem
+-/
+#print PrimeSpectrum.zeroLocus_singleton_one /-
@[simp]
theorem zeroLocus_singleton_one : zeroLocus ({1} : Set R) = ∅ :=
zeroLocus_empty_of_one_mem (Set.mem_singleton (1 : R))
#align prime_spectrum.zero_locus_singleton_one PrimeSpectrum.zeroLocus_singleton_one
+-/
+#print PrimeSpectrum.zeroLocus_empty_iff_eq_top /-
theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅ ↔ I = ⊤ :=
by
constructor
@@ -345,6 +378,7 @@ theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅
exact Set.Nonempty.ne_empty ⟨⟨M, hM.is_prime⟩, hIM⟩
· rintro rfl; apply zero_locus_empty_of_one_mem; trivial
#align prime_spectrum.zero_locus_empty_iff_eq_top PrimeSpectrum.zeroLocus_empty_iff_eq_top
+-/
#print PrimeSpectrum.zeroLocus_univ /-
@[simp]
@@ -353,19 +387,25 @@ theorem zeroLocus_univ : zeroLocus (Set.univ : Set R) = ∅ :=
#align prime_spectrum.zero_locus_univ PrimeSpectrum.zeroLocus_univ
-/
+#print PrimeSpectrum.vanishingIdeal_eq_top_iff /-
theorem vanishingIdeal_eq_top_iff {s : Set (PrimeSpectrum R)} : vanishingIdeal s = ⊤ ↔ s = ∅ := by
rw [← top_le_iff, ← subset_zero_locus_iff_le_vanishing_ideal, Submodule.top_coe, zero_locus_univ,
Set.subset_empty_iff]
#align prime_spectrum.vanishing_ideal_eq_top_iff PrimeSpectrum.vanishingIdeal_eq_top_iff
+-/
+#print PrimeSpectrum.zeroLocus_sup /-
theorem zeroLocus_sup (I J : Ideal R) :
zeroLocus ((I ⊔ J : Ideal R) : Set R) = zeroLocus I ∩ zeroLocus J :=
(gc R).l_sup
#align prime_spectrum.zero_locus_sup PrimeSpectrum.zeroLocus_sup
+-/
+#print PrimeSpectrum.zeroLocus_union /-
theorem zeroLocus_union (s s' : Set R) : zeroLocus (s ∪ s') = zeroLocus s ∩ zeroLocus s' :=
(gc_set R).l_sup
#align prime_spectrum.zero_locus_union PrimeSpectrum.zeroLocus_union
+-/
#print PrimeSpectrum.vanishingIdeal_union /-
theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
@@ -374,15 +414,19 @@ theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
#align prime_spectrum.vanishing_ideal_union PrimeSpectrum.vanishingIdeal_union
-/
+#print PrimeSpectrum.zeroLocus_iSup /-
theorem zeroLocus_iSup {ι : Sort _} (I : ι → Ideal R) :
zeroLocus ((⨆ i, I i : Ideal R) : Set R) = ⋂ i, zeroLocus (I i) :=
(gc R).l_iSup
#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSup
+-/
+#print PrimeSpectrum.zeroLocus_iUnion /-
theorem zeroLocus_iUnion {ι : Sort _} (s : ι → Set R) :
zeroLocus (⋃ i, s i) = ⋂ i, zeroLocus (s i) :=
(gc_set R).l_iSup
#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnion
+-/
#print PrimeSpectrum.zeroLocus_bUnion /-
theorem zeroLocus_bUnion (s : Set (Set R)) :
@@ -390,30 +434,40 @@ theorem zeroLocus_bUnion (s : Set (Set R)) :
#align prime_spectrum.zero_locus_bUnion PrimeSpectrum.zeroLocus_bUnion
-/
+#print PrimeSpectrum.vanishingIdeal_iUnion /-
theorem vanishingIdeal_iUnion {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
vanishingIdeal (⋃ i, t i) = ⨅ i, vanishingIdeal (t i) :=
(gc R).u_iInf
#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnion
+-/
+#print PrimeSpectrum.zeroLocus_inf /-
theorem zeroLocus_inf (I J : Ideal R) :
zeroLocus ((I ⊓ J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.inf_le
#align prime_spectrum.zero_locus_inf PrimeSpectrum.zeroLocus_inf
+-/
+#print PrimeSpectrum.union_zeroLocus /-
theorem union_zeroLocus (s s' : Set R) :
zeroLocus s ∪ zeroLocus s' = zeroLocus (Ideal.span s ⊓ Ideal.span s' : Ideal R) := by
rw [zero_locus_inf]; simp
#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocus
+-/
+#print PrimeSpectrum.zeroLocus_mul /-
theorem zeroLocus_mul (I J : Ideal R) :
zeroLocus ((I * J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.mul_le
#align prime_spectrum.zero_locus_mul PrimeSpectrum.zeroLocus_mul
+-/
+#print PrimeSpectrum.zeroLocus_singleton_mul /-
theorem zeroLocus_singleton_mul (f g : R) :
zeroLocus ({f * g} : Set R) = zeroLocus {f} ∪ zeroLocus {g} :=
Set.ext fun x => by simpa using x.2.mul_mem_iff_mem_or_mem
#align prime_spectrum.zero_locus_singleton_mul PrimeSpectrum.zeroLocus_singleton_mul
+-/
#print PrimeSpectrum.zeroLocus_pow /-
@[simp]
@@ -423,12 +477,15 @@ theorem zeroLocus_pow (I : Ideal R) {n : ℕ} (hn : 0 < n) :
#align prime_spectrum.zero_locus_pow PrimeSpectrum.zeroLocus_pow
-/
+#print PrimeSpectrum.zeroLocus_singleton_pow /-
@[simp]
theorem zeroLocus_singleton_pow (f : R) (n : ℕ) (hn : 0 < n) :
zeroLocus ({f ^ n} : Set R) = zeroLocus {f} :=
Set.ext fun x => by simpa using x.2.pow_mem_iff_mem n hn
#align prime_spectrum.zero_locus_singleton_pow PrimeSpectrum.zeroLocus_singleton_pow
+-/
+#print PrimeSpectrum.sup_vanishingIdeal_le /-
theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
vanishingIdeal t ⊔ vanishingIdeal t' ≤ vanishingIdeal (t ∩ t') :=
by
@@ -438,11 +495,14 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
rw [mem_vanishing_ideal] at hf hg
apply Submodule.add_mem <;> solve_by_elim
#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_le
+-/
+#print PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem /-
theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
I ∈ (zeroLocus {f} : Set (PrimeSpectrum R))ᶜ ↔ f ∉ I.asIdeal := by
rw [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff] <;> rfl
#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem
+-/
#print PrimeSpectrum.zariskiTopology /-
/-- The Zariski topology on the prime spectrum of a commutative ring is defined via the closed sets
@@ -459,9 +519,11 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
-/
+#print PrimeSpectrum.isOpen_iff /-
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
simp only [@eq_comm _ (Uᶜ)] <;> rfl
#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iff
+-/
#print PrimeSpectrum.isClosed_iff_zeroLocus /-
theorem isClosed_iff_zeroLocus (Z : Set (PrimeSpectrum R)) : IsClosed Z ↔ ∃ s, Z = zeroLocus s := by
@@ -550,6 +612,7 @@ theorem isRadical_vanishingIdeal (s : Set (PrimeSpectrum R)) : (vanishingIdeal s
#align prime_spectrum.is_radical_vanishing_ideal PrimeSpectrum.isRadical_vanishingIdeal
-/
+#print PrimeSpectrum.vanishingIdeal_anti_mono_iff /-
theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClosed t) :
s ⊆ t ↔ vanishingIdeal t ≤ vanishingIdeal s :=
⟨vanishingIdeal_anti_mono, fun h =>
@@ -557,19 +620,24 @@ theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClose
rw [← ht.closure_subset_iff, ← ht.closure_eq]
convert ← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iff
+-/
+#print PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff /-
theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs : IsClosed s)
(ht : IsClosed t) : s ⊂ t ↔ vanishingIdeal t < vanishingIdeal s := by
rw [Set.ssubset_def, vanishing_ideal_anti_mono_iff hs, vanishing_ideal_anti_mono_iff ht,
lt_iff_le_not_le]
#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff
+-/
+#print PrimeSpectrum.closedsEmbedding /-
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
def closedsEmbedding (R : Type _) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal s.ofDual) fun s t =>
(vanishingIdeal_anti_mono_iff s.2).symm
#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbedding
+-/
#print PrimeSpectrum.t1Space_iff_isField /-
theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField R :=
@@ -590,7 +658,6 @@ theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField
#align prime_spectrum.t1_space_iff_is_field PrimeSpectrum.t1Space_iff_isField
-/
--- mathport name: «exprZ( )»
local notation "Z(" a ")" => zeroLocus (a : Set R)
#print PrimeSpectrum.isIrreducible_zeroLocus_iff_of_radical /-
@@ -648,6 +715,7 @@ section Comap
variable {S' : Type _} [CommRing S']
+#print PrimeSpectrum.preimage_comap_zeroLocus_aux /-
theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
(fun y => ⟨Ideal.comap f y.asIdeal, inferInstance⟩ : PrimeSpectrum S → PrimeSpectrum R) ⁻¹'
zeroLocus s =
@@ -657,6 +725,7 @@ theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
simp only [mem_zero_locus, Set.image_subset_iff]
rfl
#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_aux
+-/
#print PrimeSpectrum.comap /-
/-- The function between prime spectra of commutative rings induced by a ring homomorphism.
@@ -674,10 +743,12 @@ def comap (f : R →+* S) : C(PrimeSpectrum S, PrimeSpectrum R)
variable (f : R →+* S)
+#print PrimeSpectrum.comap_asIdeal /-
@[simp]
theorem comap_asIdeal (y : PrimeSpectrum S) : (comap f y).asIdeal = Ideal.comap f y.asIdeal :=
rfl
#align prime_spectrum.comap_as_ideal PrimeSpectrum.comap_asIdeal
+-/
#print PrimeSpectrum.comap_id /-
@[simp]
@@ -685,35 +756,46 @@ theorem comap_id : comap (RingHom.id R) = ContinuousMap.id _ := by ext; rfl
#align prime_spectrum.comap_id PrimeSpectrum.comap_id
-/
+#print PrimeSpectrum.comap_comp /-
@[simp]
theorem comap_comp (f : R →+* S) (g : S →+* S') : comap (g.comp f) = (comap f).comp (comap g) :=
rfl
#align prime_spectrum.comap_comp PrimeSpectrum.comap_comp
+-/
+#print PrimeSpectrum.comap_comp_apply /-
theorem comap_comp_apply (f : R →+* S) (g : S →+* S') (x : PrimeSpectrum S') :
PrimeSpectrum.comap (g.comp f) x = (PrimeSpectrum.comap f) (PrimeSpectrum.comap g x) :=
rfl
#align prime_spectrum.comap_comp_apply PrimeSpectrum.comap_comp_apply
+-/
+#print PrimeSpectrum.preimage_comap_zeroLocus /-
@[simp]
theorem preimage_comap_zeroLocus (s : Set R) : comap f ⁻¹' zeroLocus s = zeroLocus (f '' s) :=
preimage_comap_zeroLocus_aux f s
#align prime_spectrum.preimage_comap_zero_locus PrimeSpectrum.preimage_comap_zeroLocus
+-/
+#print PrimeSpectrum.comap_injective_of_surjective /-
theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective f) :
Function.Injective (comap f) := fun x y h =>
PrimeSpectrum.ext _ _
(Ideal.comap_injective_of_surjective f hf
(congr_arg PrimeSpectrum.asIdeal h : (comap f x).asIdeal = (comap f y).asIdeal))
#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjective
+-/
+#print PrimeSpectrum.comap_singleton_isClosed_of_surjective /-
theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Surjective f)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
haveI : x.as_ideal.is_maximal := (is_closed_singleton_iff_is_maximal x).1 hx
(is_closed_singleton_iff_is_maximal _).2 (Ideal.comap_isMaximal_of_surjective f hf)
#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjective
+-/
+#print PrimeSpectrum.comap_singleton_isClosed_of_isIntegral /-
theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegral)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
@@ -721,9 +803,11 @@ theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegra
(Ideal.isMaximal_comap_of_isIntegral_of_is_maximal' f hf x.asIdeal <|
(isClosed_singleton_iff_isMaximal x).1 hx)
#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegral
+-/
variable (S)
+#print PrimeSpectrum.localization_comap_inducing /-
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
constructor
@@ -740,7 +824,9 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
exact congr_arg Submodule.carrier (IsLocalization.map_comap M S (Ideal.span s))
· rintro ⟨_, ⟨t, rfl⟩, rfl⟩; simp
#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducing
+-/
+#print PrimeSpectrum.localization_comap_injective /-
theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Function.Injective (comap (algebraMap R S)) :=
by
@@ -751,12 +837,16 @@ theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocaliza
ext1
exact h
#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injective
+-/
+#print PrimeSpectrum.localization_comap_embedding /-
theorem localization_comap_embedding [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Embedding (comap (algebraMap R S)) :=
⟨localization_comap_inducing S M, localization_comap_injective S M⟩
#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embedding
+-/
+#print PrimeSpectrum.localization_comap_range /-
theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Set.range (comap (algebraMap R S)) = {p | Disjoint (M : Set R) p.asIdeal} :=
by
@@ -770,6 +860,7 @@ theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization
ext1
exact IsLocalization.comap_map_of_isPrime_disjoint M S _ x.2 h
#align prime_spectrum.localization_comap_range PrimeSpectrum.localization_comap_range
+-/
section SpecOfSurjective
@@ -778,6 +869,7 @@ section SpecOfSurjective
open Function RingHom
+#print PrimeSpectrum.comap_inducing_of_surjective /-
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
{
induced :=
@@ -792,7 +884,9 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
rintro ⟨-, ⟨F, rfl⟩, hF⟩
exact ⟨f '' F, hF.symm.trans (preimage_comap_zero_locus f F)⟩ }
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
+-/
+#print PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap /-
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
comap f '' zeroLocus I = zeroLocus (I.comap f) :=
by
@@ -813,25 +907,32 @@ theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal
refine' p.as_ideal.sub_mem hx' (hp _)
rwa [mem_ker, map_sub, sub_eq_zero]
#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap
+-/
+#print PrimeSpectrum.range_comap_of_surjective /-
theorem range_comap_of_surjective (hf : Surjective f) : Set.range (comap f) = zeroLocus (ker f) :=
by
rw [← Set.image_univ]
convert image_comap_zero_locus_eq_zero_locus_comap _ _ hf _
rw [zero_locus_bot]
#align prime_spectrum.range_comap_of_surjective PrimeSpectrum.range_comap_of_surjective
+-/
+#print PrimeSpectrum.isClosed_range_comap_of_surjective /-
theorem isClosed_range_comap_of_surjective (hf : Surjective f) : IsClosed (Set.range (comap f)) :=
by
rw [range_comap_of_surjective _ f hf]
exact is_closed_zero_locus ↑(ker f)
#align prime_spectrum.is_closed_range_comap_of_surjective PrimeSpectrum.isClosed_range_comap_of_surjective
+-/
+#print PrimeSpectrum.closedEmbedding_comap_of_surjective /-
theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbedding (comap f) :=
{ induced := (comap_inducing_of_surjective S f hf).induced
inj := comap_injective_of_surjective f hf
closed_range := isClosed_range_comap_of_surjective S f hf }
#align prime_spectrum.closed_embedding_comap_of_surjective PrimeSpectrum.closedEmbedding_comap_of_surjective
+-/
end SpecOfSurjective
@@ -861,44 +962,60 @@ theorem isOpen_basicOpen {a : R} : IsOpen (basicOpen a : Set (PrimeSpectrum R))
#align prime_spectrum.is_open_basic_open PrimeSpectrum.isOpen_basicOpen
-/
+#print PrimeSpectrum.basicOpen_eq_zeroLocus_compl /-
@[simp]
theorem basicOpen_eq_zeroLocus_compl (r : R) :
(basicOpen r : Set (PrimeSpectrum R)) = zeroLocus {r}ᶜ :=
Set.ext fun x => by simpa only [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff]
#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_compl
+-/
+#print PrimeSpectrum.basicOpen_one /-
@[simp]
theorem basicOpen_one : basicOpen (1 : R) = ⊤ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_one PrimeSpectrum.basicOpen_one
+-/
+#print PrimeSpectrum.basicOpen_zero /-
@[simp]
theorem basicOpen_zero : basicOpen (0 : R) = ⊥ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_zero PrimeSpectrum.basicOpen_zero
+-/
+#print PrimeSpectrum.basicOpen_le_basicOpen_iff /-
theorem basicOpen_le_basicOpen_iff (f g : R) :
basicOpen f ≤ basicOpen g ↔ f ∈ (Ideal.span ({g} : Set R)).radical := by
rw [← SetLike.coe_subset_coe, basic_open_eq_zero_locus_compl, basic_open_eq_zero_locus_compl,
Set.compl_subset_compl, zero_locus_subset_zero_locus_singleton_iff]
#align prime_spectrum.basic_open_le_basic_open_iff PrimeSpectrum.basicOpen_le_basicOpen_iff
+-/
+#print PrimeSpectrum.basicOpen_mul /-
theorem basicOpen_mul (f g : R) : basicOpen (f * g) = basicOpen f ⊓ basicOpen g :=
TopologicalSpace.Opens.ext <| by simp [zero_locus_singleton_mul]
#align prime_spectrum.basic_open_mul PrimeSpectrum.basicOpen_mul
+-/
+#print PrimeSpectrum.basicOpen_mul_le_left /-
theorem basicOpen_mul_le_left (f g : R) : basicOpen (f * g) ≤ basicOpen f := by
rw [basic_open_mul f g]; exact inf_le_left
#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_left
+-/
+#print PrimeSpectrum.basicOpen_mul_le_right /-
theorem basicOpen_mul_le_right (f g : R) : basicOpen (f * g) ≤ basicOpen g := by
rw [basic_open_mul f g]; exact inf_le_right
#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_right
+-/
+#print PrimeSpectrum.basicOpen_pow /-
@[simp]
theorem basicOpen_pow (f : R) (n : ℕ) (hn : 0 < n) : basicOpen (f ^ n) = basicOpen f :=
TopologicalSpace.Opens.ext <| by simpa using zero_locus_singleton_pow f n hn
#align prime_spectrum.basic_open_pow PrimeSpectrum.basicOpen_pow
+-/
#print PrimeSpectrum.isTopologicalBasis_basic_opens /-
theorem isTopologicalBasis_basic_opens :
@@ -953,6 +1070,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
#align prime_spectrum.is_compact_basic_open PrimeSpectrum.isCompact_basicOpen
-/
+#print PrimeSpectrum.basicOpen_eq_bot_iff /-
@[simp]
theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
by
@@ -961,7 +1079,9 @@ theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
nilpotent_iff_mem_prime, Set.compl_empty_iff, mem_zero_locus, SetLike.mem_coe]
exact ⟨fun h I hI => h ⟨I, hI⟩, fun h ⟨I, hI⟩ => h I hI⟩
#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iff
+-/
+#print PrimeSpectrum.localization_away_comap_range /-
theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : Set.range (comap (algebraMap R S)) = basicOpen r :=
by
@@ -975,12 +1095,15 @@ theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r
· rintro h₁ _ ⟨⟨n, rfl⟩, h₃⟩
exact h₁ (x.2.mem_of_pow_mem _ h₃)
#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_range
+-/
+#print PrimeSpectrum.localization_away_openEmbedding /-
theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
open_range := by rw [localization_away_comap_range S r]; exact is_open_basic_open }
#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbedding
+-/
end BasicOpen
@@ -1000,31 +1123,41 @@ We endow `prime_spectrum R` with a partial order, where `x ≤ y` if and only if
instance : PartialOrder (PrimeSpectrum R) :=
PartialOrder.lift asIdeal ext
+#print PrimeSpectrum.asIdeal_le_asIdeal /-
@[simp]
theorem asIdeal_le_asIdeal (x y : PrimeSpectrum R) : x.asIdeal ≤ y.asIdeal ↔ x ≤ y :=
Iff.rfl
#align prime_spectrum.as_ideal_le_as_ideal PrimeSpectrum.asIdeal_le_asIdeal
+-/
+#print PrimeSpectrum.asIdeal_lt_asIdeal /-
@[simp]
theorem asIdeal_lt_asIdeal (x y : PrimeSpectrum R) : x.asIdeal < y.asIdeal ↔ x < y :=
Iff.rfl
#align prime_spectrum.as_ideal_lt_as_ideal PrimeSpectrum.asIdeal_lt_asIdeal
+-/
+#print PrimeSpectrum.le_iff_mem_closure /-
theorem le_iff_mem_closure (x y : PrimeSpectrum R) :
x ≤ y ↔ y ∈ closure ({x} : Set (PrimeSpectrum R)) := by
rw [← as_ideal_le_as_ideal, ← zero_locus_vanishing_ideal_eq_closure, mem_zero_locus,
vanishing_ideal_singleton, SetLike.coe_subset_coe]
#align prime_spectrum.le_iff_mem_closure PrimeSpectrum.le_iff_mem_closure
+-/
+#print PrimeSpectrum.le_iff_specializes /-
theorem le_iff_specializes (x y : PrimeSpectrum R) : x ≤ y ↔ x ⤳ y :=
(le_iff_mem_closure x y).trans specializes_iff_mem_closure.symm
#align prime_spectrum.le_iff_specializes PrimeSpectrum.le_iff_specializes
+-/
+#print PrimeSpectrum.nhdsOrderEmbedding /-
/-- `nhds` as an order embedding. -/
@[simps (config := { fullyApplied := true })]
def nhdsOrderEmbedding : PrimeSpectrum R ↪o Filter (PrimeSpectrum R) :=
OrderEmbedding.ofMapLEIff nhds fun a b => (le_iff_specializes a b).symm
#align prime_spectrum.nhds_order_embedding PrimeSpectrum.nhdsOrderEmbedding
+-/
instance : T0Space (PrimeSpectrum R) :=
⟨nhdsOrderEmbedding.Injective⟩
@@ -1041,6 +1174,7 @@ instance {R : Type _} [Field R] : Unique (PrimeSpectrum R)
end Order
+#print PrimeSpectrum.localizationMapOfSpecializes /-
/-- If `x` specializes to `y`, then there is a natural map from the localization of `y` to the
localization of `x`. -/
def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
@@ -1053,6 +1187,7 @@ def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
Set.compl_subset_compl] at h
exact (IsLocalization.map_units _ ⟨a, show a ∈ x.as_ideal.prime_compl from h ha⟩ : _))
#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializes
+-/
end PrimeSpectrum
@@ -1069,16 +1204,20 @@ def closedPoint : PrimeSpectrum R :=
variable {R}
+#print LocalRing.isLocalRingHom_iff_comap_closedPoint /-
theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) :
IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
rw [(local_hom_tfae f).out 0 4, PrimeSpectrum.ext_iff]; rfl
#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPoint
+-/
+#print LocalRing.comap_closedPoint /-
@[simp]
theorem comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) [IsLocalRingHom f] :
PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
(isLocalRingHom_iff_comap_closedPoint f).mp inferInstance
#align local_ring.comap_closed_point LocalRing.comap_closedPoint
+-/
#print LocalRing.specializes_closedPoint /-
theorem specializes_closedPoint (x : PrimeSpectrum R) : x ⤳ closedPoint R :=
@@ -1086,12 +1225,14 @@ theorem specializes_closedPoint (x : PrimeSpectrum R) : x ⤳ closedPoint R :=
#align local_ring.specializes_closed_point LocalRing.specializes_closedPoint
-/
+#print LocalRing.closedPoint_mem_iff /-
theorem closedPoint_mem_iff (U : TopologicalSpace.Opens <| PrimeSpectrum R) :
closedPoint R ∈ U ↔ U = ⊤ := by
constructor
· rw [eq_top_iff]; exact fun h x _ => (specializes_closed_point x).mem_open U.2 h
· rintro rfl; trivial
#align local_ring.closed_point_mem_iff LocalRing.closedPoint_mem_iff
+-/
@[simp]
theorem PrimeSpectrum.comap_residue (x : PrimeSpectrum (ResidueField R)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -140,7 +140,7 @@ At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in
`prime_spectrum R` where all "functions" in `s` vanish simultaneously.
-/
def zeroLocus (s : Set R) : Set (PrimeSpectrum R) :=
- { x | s ⊆ x.asIdeal }
+ {x | s ⊆ x.asIdeal}
#align prime_spectrum.zero_locus PrimeSpectrum.zeroLocus
-/
@@ -174,7 +174,7 @@ def vanishingIdeal (t : Set (PrimeSpectrum R)) : Ideal R :=
#print PrimeSpectrum.coe_vanishingIdeal /-
theorem coe_vanishingIdeal (t : Set (PrimeSpectrum R)) :
- (vanishingIdeal t : Set R) = { f : R | ∀ x : PrimeSpectrum R, x ∈ t → f ∈ x.asIdeal } :=
+ (vanishingIdeal t : Set R) = {f : R | ∀ x : PrimeSpectrum R, x ∈ t → f ∈ x.asIdeal} :=
by
ext f
rw [vanishing_ideal, SetLike.mem_coe, Submodule.mem_iInf]
@@ -555,7 +555,7 @@ theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClose
⟨vanishingIdeal_anti_mono, fun h =>
by
rw [← ht.closure_subset_iff, ← ht.closure_eq]
- convert← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
+ convert ← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iff
theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs : IsClosed s)
@@ -758,7 +758,7 @@ theorem localization_comap_embedding [Algebra R S] (M : Submonoid R) [IsLocaliza
#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embedding
theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
- Set.range (comap (algebraMap R S)) = { p | Disjoint (M : Set R) p.asIdeal } :=
+ Set.range (comap (algebraMap R S)) = {p | Disjoint (M : Set R) p.asIdeal} :=
by
ext x
constructor
@@ -843,7 +843,7 @@ section BasicOpen
/-- `basic_open r` is the open subset containing all prime ideals not containing `r`. -/
def basicOpen (r : R) : TopologicalSpace.Opens (PrimeSpectrum R)
where
- carrier := { x | r ∉ x.asIdeal }
+ carrier := {x | r ∉ x.asIdeal}
is_open' := ⟨{r}, Set.ext fun x => Set.singleton_subset_iff.trans <| Classical.not_not.symm⟩
#align prime_spectrum.basic_open PrimeSpectrum.basicOpen
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -107,7 +107,7 @@ noncomputable def primeSpectrumProd :
(by
constructor
· rintro (⟨I, hI⟩ | ⟨J, hJ⟩) (⟨I', hI'⟩ | ⟨J', hJ'⟩) h <;>
- simp only [Ideal.prod.ext_iff, prime_spectrum_prod_of_sum] at h
+ simp only [Ideal.prod.ext_iff, prime_spectrum_prod_of_sum] at h
· simp only [h]
· exact False.elim (hI.ne_top h.left)
· exact False.elim (hJ.ne_top h.right)
@@ -325,7 +325,7 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
by
rw [Set.eq_empty_iff_forall_not_mem]
intro x hx
- rw [mem_zero_locus] at hx
+ rw [mem_zero_locus] at hx
have x_prime : x.as_ideal.is_prime := by infer_instance
have eq_top : x.as_ideal = ⊤ := by rw [Ideal.eq_top_iff_one]; exact hx h
apply x_prime.ne_top eq_top
@@ -435,7 +435,7 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
intro r
rw [Submodule.mem_sup, mem_vanishing_ideal]
rintro ⟨f, hf, g, hg, rfl⟩ x ⟨hxt, hxt'⟩
- rw [mem_vanishing_ideal] at hf hg
+ rw [mem_vanishing_ideal] at hf hg
apply Submodule.add_mem <;> solve_by_elim
#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_le
@@ -498,7 +498,7 @@ theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
by
refine' (is_closed_iff_zero_locus _).trans ⟨fun h => _, fun h => _⟩
· obtain ⟨s, hs⟩ := h
- rw [eq_comm, Set.eq_singleton_iff_unique_mem] at hs
+ rw [eq_comm, Set.eq_singleton_iff_unique_mem] at hs
refine'
⟨⟨x.2.1, fun I hI =>
Classical.not_not.1
@@ -520,8 +520,8 @@ theorem zeroLocus_vanishingIdeal_eq_closure (t : Set (PrimeSpectrum R)) :
by
apply Set.Subset.antisymm
· rintro x hx t' ⟨ht', ht⟩
- obtain ⟨fs, rfl⟩ : ∃ s, t' = zero_locus s := by rwa [is_closed_iff_zero_locus] at ht'
- rw [subset_zero_locus_iff_subset_vanishing_ideal] at ht
+ obtain ⟨fs, rfl⟩ : ∃ s, t' = zero_locus s := by rwa [is_closed_iff_zero_locus] at ht'
+ rw [subset_zero_locus_iff_subset_vanishing_ideal] at ht
exact Set.Subset.trans ht hx
· rw [(is_closed_zero_locus _).closure_subset_iff]
exact subset_zero_locus_vanishing_ideal t
@@ -611,7 +611,7 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
· simp_rw [← SetLike.mem_coe, ← Set.singleton_subset_iff, ← Ideal.span_le, ←
Ideal.span_singleton_mul_span_singleton]
refine' fun h x y h' => h _ _ _
- rw [← hI.radical_le_iff] at h'⊢
+ rw [← hI.radical_le_iff] at h' ⊢
simpa only [Ideal.radical_inf, Ideal.radical_mul] using h'
· simp_rw [or_iff_not_imp_left, SetLike.not_le_iff_exists]
rintro h s t h' ⟨x, hx, hx'⟩ y hy
@@ -746,8 +746,8 @@ theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocaliza
by
intro p q h
replace h := congr_arg (fun x : PrimeSpectrum R => Ideal.map (algebraMap R S) x.asIdeal) h
- dsimp only at h
- erw [IsLocalization.map_comap M S, IsLocalization.map_comap M S] at h
+ dsimp only at h
+ erw [IsLocalization.map_comap M S, IsLocalization.map_comap M S] at h
ext1
exact h
#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injective
@@ -909,7 +909,7 @@ theorem isTopologicalBasis_basic_opens :
· rintro _ ⟨r, rfl⟩
exact is_open_basic_open
· rintro p U hp ⟨s, hs⟩
- rw [← compl_compl U, Set.mem_compl_iff, ← hs, mem_zero_locus, Set.not_subset] at hp
+ rw [← compl_compl U, Set.mem_compl_iff, ← hs, mem_zero_locus, Set.not_subset] at hp
obtain ⟨f, hfs, hfp⟩ := hp
refine' ⟨basic_open f, ⟨f, rfl⟩, hfp, _⟩
rw [← Set.compl_subset_compl, ← hs, basic_open_eq_zero_locus_compl, compl_compl]
@@ -934,7 +934,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
have hI : ∀ i, Z i = zero_locus (I i) := fun i => by
simpa only [zero_locus_vanishing_ideal_eq_closure] using (hZc i).closure_eq.symm
rw [basic_open_eq_zero_locus_compl f, Set.inter_comm, ← Set.diff_eq, Set.diff_eq_empty,
- funext hI, ← zero_locus_supr] at hZ
+ funext hI, ← zero_locus_supr] at hZ
obtain ⟨n, hn⟩ : f ∈ (⨆ i : ι, I i).radical :=
by
rw [← vanishing_ideal_zero_locus_eq_radical]
@@ -1050,7 +1050,7 @@ def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
(by
rintro ⟨a, ha⟩
rw [← PrimeSpectrum.le_iff_specializes, ← as_ideal_le_as_ideal, ← SetLike.coe_subset_coe, ←
- Set.compl_subset_compl] at h
+ Set.compl_subset_compl] at h
exact (IsLocalization.map_units _ ⟨a, show a ∈ x.as_ideal.prime_compl from h ha⟩ : _))
#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializes
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -53,7 +53,7 @@ and Chris Hughes (on an earlier repository).
noncomputable section
-open Classical
+open scoped Classical
universe u v
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -91,12 +91,6 @@ theorem pUnit (x : PrimeSpectrum PUnit) : False :=
variable (R S)
-/- warning: prime_spectrum.prime_spectrum_prod_of_sum -> PrimeSpectrum.primeSpectrumProdOfSum is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_of_sum PrimeSpectrum.primeSpectrumProdOfSumₓ'. -/
/-- The map from the direct sum of prime spectra to the prime spectrum of a direct product. -/
@[simp]
def primeSpectrumProdOfSum : Sum (PrimeSpectrum R) (PrimeSpectrum S) → PrimeSpectrum (R × S)
@@ -104,12 +98,6 @@ def primeSpectrumProdOfSum : Sum (PrimeSpectrum R) (PrimeSpectrum S) → PrimeSp
| Sum.inr ⟨J, hJ⟩ => ⟨Ideal.prod ⊤ J, Ideal.isPrime_ideal_prod_top'⟩
#align prime_spectrum.prime_spectrum_prod_of_sum PrimeSpectrum.primeSpectrumProdOfSum
-/- warning: prime_spectrum.prime_spectrum_prod -> PrimeSpectrum.primeSpectrumProd is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2))
-but is expected to have type
- forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], Equiv.{succ (max u2 u1), max (succ u2) (succ u1)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod PrimeSpectrum.primeSpectrumProdₓ'. -/
/-- The prime spectrum of `R × S` is in bijection with the disjoint unions of the prime spectrum of
`R` and the prime spectrum of `S`. -/
noncomputable def primeSpectrumProd :
@@ -132,23 +120,11 @@ noncomputable def primeSpectrumProd :
variable {R S}
-/- warning: prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal -> PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u1} R _inst_1), Eq.{succ (max u1 u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (Ring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toRing.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) => (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inl.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (Top.top.{u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Submodule.hasTop.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u1} R _inst_1), Eq.{max (succ u1) (succ u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (CommSemiring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toCommSemiring.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (fun (_x : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inl.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (Top.top.{u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Submodule.instTopSubmodule.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inl_asIdeal (x : PrimeSpectrum R) :
((primeSpectrumProd R S).symm <| Sum.inl x).asIdeal = Ideal.prod x.asIdeal ⊤ := by cases x; rfl
#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal
-/- warning: prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal -> PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u2} S _inst_2), Eq.{succ (max u1 u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (Ring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toRing.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) => (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inr.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (PrimeSpectrum.asIdeal.{u2} S _inst_2 x))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u2} S _inst_2), Eq.{max (succ u1) (succ u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (CommSemiring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toCommSemiring.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (fun (_x : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inr.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (PrimeSpectrum.asIdeal.{u2} S _inst_2 x))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
((primeSpectrumProd R S).symm <| Sum.inr x).asIdeal = Ideal.prod ⊤ x.asIdeal := by cases x; rfl
@@ -221,12 +197,6 @@ theorem vanishingIdeal_singleton (x : PrimeSpectrum R) :
#align prime_spectrum.vanishing_ideal_singleton PrimeSpectrum.vanishingIdeal_singleton
-/
-/- warning: prime_spectrum.subset_zero_locus_iff_le_vanishing_ideal -> PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) t (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I))) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) t (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I))) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.subset_zero_locus_iff_le_vanishing_ideal PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdealₓ'. -/
theorem subset_zeroLocus_iff_le_vanishingIdeal (t : Set (PrimeSpectrum R)) (I : Ideal R) :
t ⊆ zeroLocus I ↔ I ≤ vanishingIdeal t :=
⟨fun h f k => (mem_vanishingIdeal _ _).mpr fun x j => (mem_zeroLocus _ _).mpr (h j) k, fun h =>
@@ -237,12 +207,6 @@ section Gc
variable (R)
-/- warning: prime_spectrum.gc -> PrimeSpectrum.gc is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.completeBooleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t)
-but is expected to have type
- forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instCompleteBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.gc PrimeSpectrum.gcₓ'. -/
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc :
@GaloisConnection (Ideal R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun I => zeroLocus I) fun t =>
@@ -250,12 +214,6 @@ theorem gc :
fun I t => subset_zeroLocus_iff_le_vanishingIdeal t I
#align prime_spectrum.gc PrimeSpectrum.gc
-/- warning: prime_spectrum.gc_set -> PrimeSpectrum.gc_set is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Set.{u1} R) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.completeBooleanAlgebra.{u1} R))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.completeBooleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (s : Set.{u1} R) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
-but is expected to have type
- forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Set.{u1} R) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instCompleteBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (s : Set.{u1} R) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.gc_set PrimeSpectrum.gc_setₓ'. -/
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc_set :
@GaloisConnection (Set R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun s => zeroLocus s) fun t =>
@@ -280,12 +238,6 @@ theorem subset_vanishingIdeal_zeroLocus (s : Set R) : s ⊆ vanishingIdeal (zero
#align prime_spectrum.subset_vanishing_ideal_zero_locus PrimeSpectrum.subset_vanishingIdeal_zeroLocus
-/
-/- warning: prime_spectrum.le_vanishing_ideal_zero_locus -> PrimeSpectrum.le_vanishingIdeal_zeroLocus is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_vanishing_ideal_zero_locus PrimeSpectrum.le_vanishingIdeal_zeroLocusₓ'. -/
theorem le_vanishingIdeal_zeroLocus (I : Ideal R) : I ≤ vanishingIdeal (zeroLocus I) :=
(gc R).le_u_l I
#align prime_spectrum.le_vanishing_ideal_zero_locus PrimeSpectrum.le_vanishingIdeal_zeroLocus
@@ -321,34 +273,16 @@ theorem zeroLocus_anti_mono {s t : Set R} (h : s ⊆ t) : zeroLocus t ⊆ zeroLo
#align prime_spectrum.zero_locus_anti_mono PrimeSpectrum.zeroLocus_anti_mono
-/
-/- warning: prime_spectrum.zero_locus_anti_mono_ideal -> PrimeSpectrum.zeroLocus_anti_mono_ideal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))} {t : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))}, (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) s t) -> (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) t)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) s)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))} {t : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))}, (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) s t) -> (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) t)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) s)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_anti_mono_ideal PrimeSpectrum.zeroLocus_anti_mono_idealₓ'. -/
theorem zeroLocus_anti_mono_ideal {s t : Ideal R} (h : s ≤ t) :
zeroLocus (t : Set R) ⊆ zeroLocus (s : Set R) :=
(gc R).monotone_l h
#align prime_spectrum.zero_locus_anti_mono_ideal PrimeSpectrum.zeroLocus_anti_mono_ideal
-/- warning: prime_spectrum.vanishing_ideal_anti_mono -> PrimeSpectrum.vanishingIdeal_anti_mono is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) -> (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) -> (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_monoₓ'. -/
theorem vanishingIdeal_anti_mono {s t : Set (PrimeSpectrum R)} (h : s ⊆ t) :
vanishingIdeal t ≤ vanishingIdeal s :=
(gc R).monotone_u h
#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_mono
-/- warning: prime_spectrum.zero_locus_subset_zero_locus_iff -> PrimeSpectrum.zeroLocus_subset_zeroLocus_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J))) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) I))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J))) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) J (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) I))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_subset_zero_locus_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_iffₓ'. -/
theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
zeroLocus (I : Set R) ⊆ zeroLocus (J : Set R) ↔ J ≤ I.radical :=
⟨fun h =>
@@ -366,22 +300,10 @@ theorem zeroLocus_subset_zeroLocus_singleton_iff (f g : R) :
#align prime_spectrum.zero_locus_subset_zero_locus_singleton_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_singleton_iff
-/
-/- warning: prime_spectrum.zero_locus_bot -> PrimeSpectrum.zeroLocus_bot is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Bot.bot.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasBot.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Bot.bot.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instBotSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_bot PrimeSpectrum.zeroLocus_botₓ'. -/
theorem zeroLocus_bot : zeroLocus ((⊥ : Ideal R) : Set R) = Set.univ :=
(gc R).l_bot
#align prime_spectrum.zero_locus_bot PrimeSpectrum.zeroLocus_bot
-/- warning: prime_spectrum.zero_locus_singleton_zero -> PrimeSpectrum.zeroLocus_singleton_zero is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_zero PrimeSpectrum.zeroLocus_singleton_zeroₓ'. -/
@[simp]
theorem zeroLocus_singleton_zero : zeroLocus ({0} : Set R) = Set.univ :=
zeroLocus_bot
@@ -394,23 +316,11 @@ theorem zeroLocus_empty : zeroLocus (∅ : Set R) = Set.univ :=
#align prime_spectrum.zero_locus_empty PrimeSpectrum.zeroLocus_empty
-/
-/- warning: prime_spectrum.vanishing_ideal_univ -> PrimeSpectrum.vanishingIdeal_univ is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_univ PrimeSpectrum.vanishingIdeal_univₓ'. -/
@[simp]
theorem vanishingIdeal_univ : vanishingIdeal (∅ : Set (PrimeSpectrum R)) = ⊤ := by
simpa using (gc R).u_top
#align prime_spectrum.vanishing_ideal_univ PrimeSpectrum.vanishingIdeal_univ
-/- warning: prime_spectrum.zero_locus_empty_of_one_mem -> PrimeSpectrum.zeroLocus_empty_of_one_mem is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} R}, (Membership.Mem.{u1, u1} R (Set.{u1} R) (Set.hasMem.{u1} R) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))) s) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} R}, (Membership.mem.{u1, u1} R (Set.{u1} R) (Set.instMembershipSet.{u1} R) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) s) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_memₓ'. -/
theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s = ∅ :=
by
rw [Set.eq_empty_iff_forall_not_mem]
@@ -421,23 +331,11 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
apply x_prime.ne_top eq_top
#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_mem
-/- warning: prime_spectrum.zero_locus_singleton_one -> PrimeSpectrum.zeroLocus_singleton_one is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_one PrimeSpectrum.zeroLocus_singleton_oneₓ'. -/
@[simp]
theorem zeroLocus_singleton_one : zeroLocus ({1} : Set R) = ∅ :=
zeroLocus_empty_of_one_mem (Set.mem_singleton (1 : R))
#align prime_spectrum.zero_locus_singleton_one PrimeSpectrum.zeroLocus_singleton_one
-/- warning: prime_spectrum.zero_locus_empty_iff_eq_top -> PrimeSpectrum.zeroLocus_empty_iff_eq_top is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))}, Iff (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) I (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))}, Iff (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_empty_iff_eq_top PrimeSpectrum.zeroLocus_empty_iff_eq_topₓ'. -/
theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅ ↔ I = ⊤ :=
by
constructor
@@ -455,34 +353,16 @@ theorem zeroLocus_univ : zeroLocus (Set.univ : Set R) = ∅ :=
#align prime_spectrum.zero_locus_univ PrimeSpectrum.zeroLocus_univ
-/
-/- warning: prime_spectrum.vanishing_ideal_eq_top_iff -> PrimeSpectrum.vanishingIdeal_eq_top_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, Iff (Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, Iff (Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s) (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_eq_top_iff PrimeSpectrum.vanishingIdeal_eq_top_iffₓ'. -/
theorem vanishingIdeal_eq_top_iff {s : Set (PrimeSpectrum R)} : vanishingIdeal s = ⊤ ↔ s = ∅ := by
rw [← top_le_iff, ← subset_zero_locus_iff_le_vanishing_ideal, Submodule.top_coe, zero_locus_univ,
Set.subset_empty_iff]
#align prime_spectrum.vanishing_ideal_eq_top_iff PrimeSpectrum.vanishingIdeal_eq_top_iff
-/- warning: prime_spectrum.zero_locus_sup -> PrimeSpectrum.zeroLocus_sup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Sup.sup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SemilatticeSup.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (IdemSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.idemSemiring.{u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) I J))) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Sup.sup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SemilatticeSup.toSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (IdemCommSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instIdemCommSemiringIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I J))) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_sup PrimeSpectrum.zeroLocus_supₓ'. -/
theorem zeroLocus_sup (I J : Ideal R) :
zeroLocus ((I ⊔ J : Ideal R) : Set R) = zeroLocus I ∩ zeroLocus J :=
(gc R).l_sup
#align prime_spectrum.zero_locus_sup PrimeSpectrum.zeroLocus_sup
-/- warning: prime_spectrum.zero_locus_union -> PrimeSpectrum.zeroLocus_union is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Union.union.{u1} (Set.{u1} R) (Set.hasUnion.{u1} R) s s')) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s'))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Union.union.{u1} (Set.{u1} R) (Set.instUnionSet.{u1} R) s s')) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s'))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_union PrimeSpectrum.zeroLocus_unionₓ'. -/
theorem zeroLocus_union (s s' : Set R) : zeroLocus (s ∪ s') = zeroLocus s ∩ zeroLocus s' :=
(gc_set R).l_sup
#align prime_spectrum.zero_locus_union PrimeSpectrum.zeroLocus_union
@@ -494,23 +374,11 @@ theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
#align prime_spectrum.vanishing_ideal_union PrimeSpectrum.vanishingIdeal_union
-/
-/- warning: prime_spectrum.zero_locus_supr -> PrimeSpectrum.zeroLocus_iSup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (I : ι -> (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (iSup.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (ConditionallyCompleteLattice.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) ι (fun (i : ι) => I i)))) (Set.iInter.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (I i))))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (I : ι -> (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} R _inst_1)) (PrimeSpectrum.zeroLocus.{u2} R _inst_1 (SetLike.coe.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) (iSup.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (ConditionallyCompleteLattice.toSupSet.{u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Submodule.completeLattice.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))))) ι (fun (i : ι) => I i)))) (Set.iInter.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u2} R _inst_1 (SetLike.coe.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) (I i))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSupₓ'. -/
theorem zeroLocus_iSup {ι : Sort _} (I : ι → Ideal R) :
zeroLocus ((⨆ i, I i : Ideal R) : Set R) = ⋂ i, zeroLocus (I i) :=
(gc R).l_iSup
#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSup
-/- warning: prime_spectrum.zero_locus_Union -> PrimeSpectrum.zeroLocus_iUnion is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (s : ι -> (Set.{u1} R)), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Set.iUnion.{u1, u2} R ι (fun (i : ι) => s i))) (Set.iInter.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 (s i)))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (s : ι -> (Set.{u2} R)), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} R _inst_1)) (PrimeSpectrum.zeroLocus.{u2} R _inst_1 (Set.iUnion.{u2, u1} R ι (fun (i : ι) => s i))) (Set.iInter.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u2} R _inst_1 (s i)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnionₓ'. -/
theorem zeroLocus_iUnion {ι : Sort _} (s : ι → Set R) :
zeroLocus (⋃ i, s i) = ⋂ i, zeroLocus (s i) :=
(gc_set R).l_iSup
@@ -522,56 +390,26 @@ theorem zeroLocus_bUnion (s : Set (Set R)) :
#align prime_spectrum.zero_locus_bUnion PrimeSpectrum.zeroLocus_bUnion
-/
-/- warning: prime_spectrum.vanishing_ideal_Union -> PrimeSpectrum.vanishingIdeal_iUnion is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (t : ι -> (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))), Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Set.iUnion.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => t i))) (iInf.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) ι (fun (i : ι) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (t i)))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (t : ι -> (Set.{u2} (PrimeSpectrum.{u2} R _inst_1))), Eq.{succ u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u2} R _inst_1 (Set.iUnion.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => t i))) (iInf.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Submodule.instInfSetSubmodule.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) ι (fun (i : ι) => PrimeSpectrum.vanishingIdeal.{u2} R _inst_1 (t i)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnionₓ'. -/
theorem vanishingIdeal_iUnion {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
vanishingIdeal (⋃ i, t i) = ⨅ i, vanishingIdeal (t i) :=
(gc R).u_iInf
#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnion
-/- warning: prime_spectrum.zero_locus_inf -> PrimeSpectrum.zeroLocus_inf is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Inf.inf.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Inf.inf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instInfSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_inf PrimeSpectrum.zeroLocus_infₓ'. -/
theorem zeroLocus_inf (I J : Ideal R) :
zeroLocus ((I ⊓ J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.inf_le
#align prime_spectrum.zero_locus_inf PrimeSpectrum.zeroLocus_inf
-/- warning: prime_spectrum.union_zero_locus -> PrimeSpectrum.union_zeroLocus is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s')) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Inf.inf.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (Ideal.span.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) s) (Ideal.span.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) s'))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s')) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Inf.inf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instInfSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s'))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocusₓ'. -/
theorem union_zeroLocus (s s' : Set R) :
zeroLocus s ∪ zeroLocus s' = zeroLocus (Ideal.span s ⊓ Ideal.span s' : Ideal R) := by
rw [zero_locus_inf]; simp
#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocus
-/- warning: prime_spectrum.zero_locus_mul -> PrimeSpectrum.zeroLocus_mul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (HMul.hMul.{u1, u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (instHMul.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.hasMul.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (HMul.hMul.{u1, u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (instHMul.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instMulIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_mul PrimeSpectrum.zeroLocus_mulₓ'. -/
theorem zeroLocus_mul (I J : Ideal R) :
zeroLocus ((I * J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.mul_le
#align prime_spectrum.zero_locus_mul PrimeSpectrum.zeroLocus_mul
-/- warning: prime_spectrum.zero_locus_singleton_mul -> PrimeSpectrum.zeroLocus_singleton_mul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) g)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) g)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_mul PrimeSpectrum.zeroLocus_singleton_mulₓ'. -/
theorem zeroLocus_singleton_mul (f g : R) :
zeroLocus ({f * g} : Set R) = zeroLocus {f} ∪ zeroLocus {g} :=
Set.ext fun x => by simpa using x.2.mul_mem_iff_mem_or_mem
@@ -585,24 +423,12 @@ theorem zeroLocus_pow (I : Ideal R) {n : ℕ} (hn : 0 < n) :
#align prime_spectrum.zero_locus_pow PrimeSpectrum.zeroLocus_pow
-/
-/- warning: prime_spectrum.zero_locus_singleton_pow -> PrimeSpectrum.zeroLocus_singleton_pow is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f n))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) f n))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_pow PrimeSpectrum.zeroLocus_singleton_powₓ'. -/
@[simp]
theorem zeroLocus_singleton_pow (f : R) (n : ℕ) (hn : 0 < n) :
zeroLocus ({f ^ n} : Set R) = zeroLocus {f} :=
Set.ext fun x => by simpa using x.2.pow_mem_iff_mem n hn
#align prime_spectrum.zero_locus_singleton_pow PrimeSpectrum.zeroLocus_singleton_pow
-/- warning: prime_spectrum.sup_vanishing_ideal_le -> PrimeSpectrum.sup_vanishingIdeal_le is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (t' : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Sup.sup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SemilatticeSup.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (IdemSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.idemSemiring.{u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t')) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) t t'))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (t' : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (Sup.sup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SemilatticeSup.toSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (IdemCommSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instIdemCommSemiringIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t')) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) t t'))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_leₓ'. -/
theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
vanishingIdeal t ⊔ vanishingIdeal t' ≤ vanishingIdeal (t ∩ t') :=
by
@@ -613,12 +439,6 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
apply Submodule.add_mem <;> solve_by_elim
#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_le
-/- warning: prime_spectrum.mem_compl_zero_locus_iff_not_mem -> PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {f : R} {I : PrimeSpectrum.{u1} R _inst_1}, Iff (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasMem.{u1} (PrimeSpectrum.{u1} R _inst_1)) I (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)))) (Not (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f (PrimeSpectrum.asIdeal.{u1} R _inst_1 I)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {f : R} {I : PrimeSpectrum.{u1} R _inst_1}, Iff (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instMembershipSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) I (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)))) (Not (Membership.mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.instMembership.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (PrimeSpectrum.asIdeal.{u1} R _inst_1 I)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_memₓ'. -/
theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
I ∈ (zeroLocus {f} : Set (PrimeSpectrum R))ᶜ ↔ f ∉ I.asIdeal := by
rw [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff] <;> rfl
@@ -639,12 +459,6 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
-/
-/- warning: prime_spectrum.is_open_iff -> PrimeSpectrum.isOpen_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (U : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), Iff (IsOpen.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) U) (Exists.{succ u1} (Set.{u1} R) (fun (s : Set.{u1} R) => Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) U) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (U : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), Iff (IsOpen.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) U) (Exists.{succ u1} (Set.{u1} R) (fun (s : Set.{u1} R) => Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) U) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iffₓ'. -/
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
simp only [@eq_comm _ (Uᶜ)] <;> rfl
#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iff
@@ -736,12 +550,6 @@ theorem isRadical_vanishingIdeal (s : Set (PrimeSpectrum R)) : (vanishingIdeal s
#align prime_spectrum.is_radical_vanishing_ideal PrimeSpectrum.isRadical_vanishingIdeal
-/
-/- warning: prime_spectrum.vanishing_ideal_anti_mono_iff -> PrimeSpectrum.vanishingIdeal_anti_mono_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iffₓ'. -/
theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClosed t) :
s ⊆ t ↔ vanishingIdeal t ≤ vanishingIdeal s :=
⟨vanishingIdeal_anti_mono, fun h =>
@@ -750,24 +558,12 @@ theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClose
convert← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iff
-/- warning: prime_spectrum.vanishing_ideal_strict_anti_mono_iff -> PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) s) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSSubset.SSubset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSsubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LT.lt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) s) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSSubset.SSubset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LT.lt.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLT.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iffₓ'. -/
theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs : IsClosed s)
(ht : IsClosed t) : s ⊂ t ↔ vanishingIdeal t < vanishingIdeal s := by
rw [Set.ssubset_def, vanishing_ideal_anti_mono_iff hs, vanishing_ideal_anti_mono_iff ht,
lt_iff_le_not_le]
#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff
-/- warning: prime_spectrum.closeds_embedding -> PrimeSpectrum.closedsEmbedding is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) [_inst_3 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (OrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (OrderDual.hasLe.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (Preorder.toHasLe.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PrimeSpectrum.{u1} R _inst_3) (TopologicalSpace.Closeds.setLike.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)))))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3)))))))
-but is expected to have type
- forall (R : Type.{u1}) [_inst_3 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (OrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (OrderDual.instLEOrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (Preorder.toLE.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (TopologicalSpace.Closeds.instCompleteLatticeCloseds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))))))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))))))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbeddingₓ'. -/
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
def closedsEmbedding (R : Type _) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
@@ -852,12 +648,6 @@ section Comap
variable {S' : Type _} [CommRing S']
-/- warning: prime_spectrum.preimage_comap_zero_locus_aux -> PrimeSpectrum.preimage_comap_zeroLocus_aux is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (fun (y : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.mk.{u1} R _inst_1 (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y)) (inferInstance.{0} (Ideal.IsPrime.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))) (Ideal.IsPrime.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y) (PrimeSpectrum.isPrime.{u2} S _inst_2 y)))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f) s))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (fun (y : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.mk.{u1} R _inst_1 (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y)) (inferInstance.{0} (Ideal.IsPrime.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))) (Ideal.IsPrime.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y) (PrimeSpectrum.IsPrime.{u2} S _inst_2 y)))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f) s))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_auxₓ'. -/
theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
(fun y => ⟨Ideal.comap f y.asIdeal, inferInstance⟩ : PrimeSpectrum S → PrimeSpectrum R) ⁻¹'
zeroLocus s =
@@ -884,12 +674,6 @@ def comap (f : R →+* S) : C(PrimeSpectrum S, PrimeSpectrum R)
variable (f : R →+* S)
-/- warning: prime_spectrum.comap_as_ideal -> PrimeSpectrum.comap_asIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (y : PrimeSpectrum.{u2} S _inst_2), Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) y)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (y : PrimeSpectrum.{u2} S _inst_2), Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) y)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_as_ideal PrimeSpectrum.comap_asIdealₓ'. -/
@[simp]
theorem comap_asIdeal (y : PrimeSpectrum S) : (comap f y).asIdeal = Ideal.comap f y.asIdeal :=
rfl
@@ -901,45 +685,21 @@ theorem comap_id : comap (RingHom.id R) = ContinuousMap.id _ := by ext; rfl
#align prime_spectrum.comap_id PrimeSpectrum.comap_id
-/
-/- warning: prime_spectrum.comap_comp -> PrimeSpectrum.comap_comp is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] {S' : Type.{u3}} [_inst_3 : CommRing.{u3} S'] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (g : RingHom.{u2, u3} S S' (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3)))), Eq.{max (succ u3) (succ u1)} (ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u3} R S' _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} R S S' (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3))) g f)) (ContinuousMap.comp.{u3, u2, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) (PrimeSpectrum.comap.{u2, u3} S S' _inst_2 _inst_3 g))
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u3}} [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u3} S] {S' : Type.{u1}} [_inst_3 : CommRing.{u1} S'] (f : RingHom.{u2, u3} R S (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2)))) (g : RingHom.{u3, u1} S S' (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3)))), Eq.{max (succ u2) (succ u1)} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.comap.{u2, u1} R S' _inst_1 _inst_3 (RingHom.comp.{u2, u3, u1} R S S' (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3))) g f)) (ContinuousMap.comp.{u1, u3, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (PrimeSpectrum.comap.{u2, u3} R S _inst_1 _inst_2 f) (PrimeSpectrum.comap.{u3, u1} S S' _inst_2 _inst_3 g))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_comp PrimeSpectrum.comap_compₓ'. -/
@[simp]
theorem comap_comp (f : R →+* S) (g : S →+* S') : comap (g.comp f) = (comap f).comp (comap g) :=
rfl
#align prime_spectrum.comap_comp PrimeSpectrum.comap_comp
-/- warning: prime_spectrum.comap_comp_apply -> PrimeSpectrum.comap_comp_apply is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] {S' : Type.{u3}} [_inst_3 : CommRing.{u3} S'] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (g : RingHom.{u2, u3} S S' (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3)))) (x : PrimeSpectrum.{u3} S' _inst_3), Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u3} S' _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u3} R S' _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} R S S' (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3))) g f)) x) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) (fun (_x : ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) => (PrimeSpectrum.{u3} S' _inst_3) -> (PrimeSpectrum.{u2} S _inst_2)) (ContinuousMap.hasCoeToFun.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) (PrimeSpectrum.comap.{u2, u3} S S' _inst_2 _inst_3 g) x))
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u3}} [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u3} S] {S' : Type.{u1}} [_inst_3 : CommRing.{u1} S'] (f : RingHom.{u2, u3} R S (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2)))) (g : RingHom.{u3, u1} S S' (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3)))) (x : PrimeSpectrum.{u1} S' _inst_3), Eq.{succ u2} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u2} R _inst_1) x) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u1} S' _inst_3) (fun (_x : PrimeSpectrum.{u1} S' _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u2} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u1, u2} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1))) (PrimeSpectrum.comap.{u2, u1} R S' _inst_1 _inst_3 (RingHom.comp.{u2, u3, u1} R S S' (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3))) g f)) x) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u3} S _inst_2) (fun (_x : PrimeSpectrum.{u3} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u3} S _inst_2) => PrimeSpectrum.{u2} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u2 u3, u3, u2} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1))) (PrimeSpectrum.comap.{u2, u3} R S _inst_1 _inst_2 f) (FunLike.coe.{max (succ u3) (succ u1), succ u1, succ u3} (ContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2)) (PrimeSpectrum.{u1} S' _inst_3) (fun (_x : PrimeSpectrum.{u1} S' _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u3} S _inst_2) _x) (ContinuousMapClass.toFunLike.{max u3 u1, u1, u3} (ContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2)) (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2))) (PrimeSpectrum.comap.{u3, u1} S S' _inst_2 _inst_3 g) x))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_comp_apply PrimeSpectrum.comap_comp_applyₓ'. -/
theorem comap_comp_apply (f : R →+* S) (g : S →+* S') (x : PrimeSpectrum S') :
PrimeSpectrum.comap (g.comp f) x = (PrimeSpectrum.comap f) (PrimeSpectrum.comap g x) :=
rfl
#align prime_spectrum.comap_comp_apply PrimeSpectrum.comap_comp_apply
-/- warning: prime_spectrum.preimage_comap_zero_locus -> PrimeSpectrum.preimage_comap_zeroLocus is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f) s))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f) s))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.preimage_comap_zero_locus PrimeSpectrum.preimage_comap_zeroLocusₓ'. -/
@[simp]
theorem preimage_comap_zeroLocus (s : Set R) : comap f ⁻¹' zeroLocus s = zeroLocus (f '' s) :=
preimage_comap_zeroLocus_aux f s
#align prime_spectrum.preimage_comap_zero_locus PrimeSpectrum.preimage_comap_zeroLocus
-/- warning: prime_spectrum.comap_injective_of_surjective -> PrimeSpectrum.comap_injective_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjectiveₓ'. -/
theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective f) :
Function.Injective (comap f) := fun x y h =>
PrimeSpectrum.ext _ _
@@ -947,12 +707,6 @@ theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective
(congr_arg PrimeSpectrum.asIdeal h : (comap f x).asIdeal = (comap f y).asIdeal))
#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjective
-/- warning: prime_spectrum.comap_singleton_is_closed_of_surjective -> PrimeSpectrum.comap_singleton_isClosed_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.hasSingleton.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.instSingletonSet.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) x) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjectiveₓ'. -/
theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Surjective f)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
@@ -960,12 +714,6 @@ theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Su
(is_closed_singleton_iff_is_maximal _).2 (Ideal.comap_isMaximal_of_surjective f hf)
#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjective
-/- warning: prime_spectrum.comap_singleton_is_closed_of_is_integral -> PrimeSpectrum.comap_singleton_isClosed_of_isIntegral is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (RingHom.IsIntegral.{u1, u2} R S _inst_1 (CommRing.toRing.{u2} S _inst_2) f) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.hasSingleton.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (RingHom.IsIntegral.{u1, u2} R S _inst_1 (CommRing.toRing.{u2} S _inst_2) f) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.instSingletonSet.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) x) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegralₓ'. -/
theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegral)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
@@ -976,12 +724,6 @@ theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegra
variable (S)
-/- warning: prime_spectrum.localization_comap_inducing -> PrimeSpectrum.localization_comap_inducing is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducingₓ'. -/
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
constructor
@@ -999,12 +741,6 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
· rintro ⟨_, ⟨t, rfl⟩, rfl⟩; simp
#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducing
-/- warning: prime_spectrum.localization_comap_injective -> PrimeSpectrum.localization_comap_injective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injectiveₓ'. -/
theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Function.Injective (comap (algebraMap R S)) :=
by
@@ -1016,23 +752,11 @@ theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocaliza
exact h
#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injective
-/- warning: prime_spectrum.localization_comap_embedding -> PrimeSpectrum.localization_comap_embedding is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Embedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Embedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embeddingₓ'. -/
theorem localization_comap_embedding [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Embedding (comap (algebraMap R S)) :=
⟨localization_comap_inducing S M, localization_comap_injective S M⟩
#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embedding
-/- warning: prime_spectrum.localization_comap_range -> PrimeSpectrum.localization_comap_range is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))) (setOf.{u1} (PrimeSpectrum.{u1} R _inst_1) (fun (p : PrimeSpectrum.{u1} R _inst_1) => Disjoint.{u1} (Set.{u1} R) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.completeBooleanAlgebra.{u1} R)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} R) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} R) (Set.booleanAlgebra.{u1} R))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) R (Submonoid.setLike.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))) M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 p))))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))) (setOf.{u1} (PrimeSpectrum.{u1} R _inst_1) (fun (p : PrimeSpectrum.{u1} R _inst_1) => Disjoint.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} R) (Preorder.toLE.{u1} (Set.{u1} R) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))) (SetLike.coe.{u1, u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) R (Submonoid.instSetLikeSubmonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) M) (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 p))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_range PrimeSpectrum.localization_comap_rangeₓ'. -/
theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Set.range (comap (algebraMap R S)) = { p | Disjoint (M : Set R) p.asIdeal } :=
by
@@ -1054,12 +778,6 @@ section SpecOfSurjective
open Function RingHom
-/- warning: prime_spectrum.comap_inducing_of_surjective -> PrimeSpectrum.comap_inducing_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjectiveₓ'. -/
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
{
induced :=
@@ -1075,9 +793,6 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
exact ⟨f '' F, hF.symm.trans (preimage_comap_zero_locus f F)⟩ }
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
-/- warning: prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap -> PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comapₓ'. -/
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
comap f '' zeroLocus I = zeroLocus (I.comap f) :=
by
@@ -1099,12 +814,6 @@ theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal
rwa [mem_ker, map_sub, sub_eq_zero]
#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap
-/- warning: prime_spectrum.range_comap_of_surjective -> PrimeSpectrum.range_comap_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f))))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.range_comap_of_surjective PrimeSpectrum.range_comap_of_surjectiveₓ'. -/
theorem range_comap_of_surjective (hf : Surjective f) : Set.range (comap f) = zeroLocus (ker f) :=
by
rw [← Set.image_univ]
@@ -1112,24 +821,12 @@ theorem range_comap_of_surjective (hf : Surjective f) : Set.range (comap f) = ze
rw [zero_locus_bot]
#align prime_spectrum.range_comap_of_surjective PrimeSpectrum.range_comap_of_surjective
-/- warning: prime_spectrum.is_closed_range_comap_of_surjective -> PrimeSpectrum.isClosed_range_comap_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.is_closed_range_comap_of_surjective PrimeSpectrum.isClosed_range_comap_of_surjectiveₓ'. -/
theorem isClosed_range_comap_of_surjective (hf : Surjective f) : IsClosed (Set.range (comap f)) :=
by
rw [range_comap_of_surjective _ f hf]
exact is_closed_zero_locus ↑(ker f)
#align prime_spectrum.is_closed_range_comap_of_surjective PrimeSpectrum.isClosed_range_comap_of_surjective
-/- warning: prime_spectrum.closed_embedding_comap_of_surjective -> PrimeSpectrum.closedEmbedding_comap_of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (ClosedEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (ClosedEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.closed_embedding_comap_of_surjective PrimeSpectrum.closedEmbedding_comap_of_surjectiveₓ'. -/
theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbedding (comap f) :=
{ induced := (comap_inducing_of_surjective S f hf).induced
inj := comap_injective_of_surjective f hf
@@ -1164,88 +861,40 @@ theorem isOpen_basicOpen {a : R} : IsOpen (basicOpen a : Set (PrimeSpectrum R))
#align prime_spectrum.is_open_basic_open PrimeSpectrum.isOpen_basicOpen
-/
-/- warning: prime_spectrum.basic_open_eq_zero_locus_compl -> PrimeSpectrum.basicOpen_eq_zeroLocus_compl is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (r : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) r)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (r : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.coe.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) r)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_complₓ'. -/
@[simp]
theorem basicOpen_eq_zeroLocus_compl (r : R) :
(basicOpen r : Set (PrimeSpectrum R)) = zeroLocus {r}ᶜ :=
Set.ext fun x => by simpa only [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff]
#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_compl
-/- warning: prime_spectrum.basic_open_one -> PrimeSpectrum.basicOpen_one is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))) (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_one PrimeSpectrum.basicOpen_oneₓ'. -/
@[simp]
theorem basicOpen_one : basicOpen (1 : R) = ⊤ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_one PrimeSpectrum.basicOpen_one
-/- warning: prime_spectrum.basic_open_zero -> PrimeSpectrum.basicOpen_zero is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))))) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_zero PrimeSpectrum.basicOpen_zeroₓ'. -/
@[simp]
theorem basicOpen_zero : basicOpen (0 : R) = ⊥ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_zero PrimeSpectrum.basicOpen_zero
-/- warning: prime_spectrum.basic_open_le_basic_open_iff -> PrimeSpectrum.basicOpen_le_basicOpen_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Iff (LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)) (Membership.Mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) g))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Iff (LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)) (Membership.mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.instMembership.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) g))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_le_basic_open_iff PrimeSpectrum.basicOpen_le_basicOpen_iffₓ'. -/
theorem basicOpen_le_basicOpen_iff (f g : R) :
basicOpen f ≤ basicOpen g ↔ f ∈ (Ideal.span ({g} : Set R)).radical := by
rw [← SetLike.coe_subset_coe, basic_open_eq_zero_locus_compl, basic_open_eq_zero_locus_compl,
Set.compl_subset_compl, zero_locus_subset_zero_locus_singleton_iff]
#align prime_spectrum.basic_open_le_basic_open_iff PrimeSpectrum.basicOpen_le_basicOpen_iff
-/- warning: prime_spectrum.basic_open_mul -> PrimeSpectrum.basicOpen_mul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (Inf.inf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (Inf.inf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Lattice.toInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul PrimeSpectrum.basicOpen_mulₓ'. -/
theorem basicOpen_mul (f g : R) : basicOpen (f * g) = basicOpen f ⊓ basicOpen g :=
TopologicalSpace.Opens.ext <| by simp [zero_locus_singleton_mul]
#align prime_spectrum.basic_open_mul PrimeSpectrum.basicOpen_mul
-/- warning: prime_spectrum.basic_open_mul_le_left -> PrimeSpectrum.basicOpen_mul_le_left is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_leftₓ'. -/
theorem basicOpen_mul_le_left (f g : R) : basicOpen (f * g) ≤ basicOpen f := by
rw [basic_open_mul f g]; exact inf_le_left
#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_left
-/- warning: prime_spectrum.basic_open_mul_le_right -> PrimeSpectrum.basicOpen_mul_le_right is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_rightₓ'. -/
theorem basicOpen_mul_le_right (f g : R) : basicOpen (f * g) ≤ basicOpen g := by
rw [basic_open_mul f g]; exact inf_le_right
#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_right
-/- warning: prime_spectrum.basic_open_pow -> PrimeSpectrum.basicOpen_pow is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f n)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) f n)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_pow PrimeSpectrum.basicOpen_powₓ'. -/
@[simp]
theorem basicOpen_pow (f : R) (n : ℕ) (hn : 0 < n) : basicOpen (f ^ n) = basicOpen f :=
TopologicalSpace.Opens.ext <| by simpa using zero_locus_singleton_pow f n hn
@@ -1304,12 +953,6 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
#align prime_spectrum.is_compact_basic_open PrimeSpectrum.isCompact_basicOpen
-/
-/- warning: prime_spectrum.basic_open_eq_bot_iff -> PrimeSpectrum.basicOpen_eq_bot_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R), Iff (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (IsNilpotent.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1))) f)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R), Iff (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (IsNilpotent.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iffₓ'. -/
@[simp]
theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
by
@@ -1319,12 +962,6 @@ theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
exact ⟨fun h I hI => h ⟨I, hI⟩, fun h ⟨I, hI⟩ => h I hI⟩
#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iff
-/- warning: prime_spectrum.localization_away_comap_range -> PrimeSpectrum.localization_away_comap_range is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3)) _inst_4)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (fun (_x : PrimeSpectrum.{u2} S _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_3) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3)) _inst_4)))) (SetLike.coe.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_rangeₓ'. -/
theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : Set.range (comap (algebraMap R S)) = basicOpen r :=
by
@@ -1339,12 +976,6 @@ theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r
exact h₁ (x.2.mem_of_pow_mem _ h₃)
#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_range
-/- warning: prime_spectrum.localization_away_open_embedding -> PrimeSpectrum.localization_away_openEmbedding is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], OpenEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3)) _inst_4)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], OpenEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (fun (_x : PrimeSpectrum.{u2} S _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_3) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3)) _inst_4)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbeddingₓ'. -/
theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
@@ -1369,56 +1000,26 @@ We endow `prime_spectrum R` with a partial order, where `x ≤ y` if and only if
instance : PartialOrder (PrimeSpectrum R) :=
PartialOrder.lift asIdeal ext
-/- warning: prime_spectrum.as_ideal_le_as_ideal -> PrimeSpectrum.asIdeal_le_asIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.as_ideal_le_as_ideal PrimeSpectrum.asIdeal_le_asIdealₓ'. -/
@[simp]
theorem asIdeal_le_asIdeal (x y : PrimeSpectrum R) : x.asIdeal ≤ y.asIdeal ↔ x ≤ y :=
Iff.rfl
#align prime_spectrum.as_ideal_le_as_ideal PrimeSpectrum.asIdeal_le_asIdeal
-/- warning: prime_spectrum.as_ideal_lt_as_ideal -> PrimeSpectrum.asIdeal_lt_asIdeal is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LT.lt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LT.lt.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLt.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LT.lt.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLT.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LT.lt.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLT.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.as_ideal_lt_as_ideal PrimeSpectrum.asIdeal_lt_asIdealₓ'. -/
@[simp]
theorem asIdeal_lt_asIdeal (x y : PrimeSpectrum R) : x.asIdeal < y.asIdeal ↔ x < y :=
Iff.rfl
#align prime_spectrum.as_ideal_lt_as_ideal PrimeSpectrum.asIdeal_lt_asIdeal
-/- warning: prime_spectrum.le_iff_mem_closure -> PrimeSpectrum.le_iff_mem_closure is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y) (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasMem.{u1} (PrimeSpectrum.{u1} R _inst_1)) y (closure.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) x)))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y) (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instMembershipSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) y (closure.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) x)))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_iff_mem_closure PrimeSpectrum.le_iff_mem_closureₓ'. -/
theorem le_iff_mem_closure (x y : PrimeSpectrum R) :
x ≤ y ↔ y ∈ closure ({x} : Set (PrimeSpectrum R)) := by
rw [← as_ideal_le_as_ideal, ← zero_locus_vanishing_ideal_eq_closure, mem_zero_locus,
vanishing_ideal_singleton, SetLike.coe_subset_coe]
#align prime_spectrum.le_iff_mem_closure PrimeSpectrum.le_iff_mem_closure
-/- warning: prime_spectrum.le_iff_specializes -> PrimeSpectrum.le_iff_specializes is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y) (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y) (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y)
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_iff_specializes PrimeSpectrum.le_iff_specializesₓ'. -/
theorem le_iff_specializes (x y : PrimeSpectrum R) : x ≤ y ↔ x ⤳ y :=
(le_iff_mem_closure x y).trans specializes_iff_mem_closure.symm
#align prime_spectrum.le_iff_specializes PrimeSpectrum.le_iff_specializes
-/- warning: prime_spectrum.nhds_order_embedding -> PrimeSpectrum.nhdsOrderEmbedding is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Filter.partialOrder.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) (Preorder.toLE.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Filter.instPartialOrderFilter.{u1} (PrimeSpectrum.{u1} R _inst_1))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.nhds_order_embedding PrimeSpectrum.nhdsOrderEmbeddingₓ'. -/
/-- `nhds` as an order embedding. -/
@[simps (config := { fullyApplied := true })]
def nhdsOrderEmbedding : PrimeSpectrum R ↪o Filter (PrimeSpectrum R) :=
@@ -1440,12 +1041,6 @@ instance {R : Type _} [Field R] : Unique (PrimeSpectrum R)
end Order
-/- warning: prime_spectrum.localization_map_of_specializes -> PrimeSpectrum.localizationMapOfSpecializes is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {x : PrimeSpectrum.{u1} R _inst_1} {y : PrimeSpectrum.{u1} R _inst_1}, (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y) -> (RingHom.{u1, u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (NonAssocRing.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Ring.toNonAssocRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (CommRing.toRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Localization.commRing.{u1} R _inst_1 (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)))))) (NonAssocRing.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (Ring.toNonAssocRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (CommRing.toRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (Localization.commRing.{u1} R _inst_1 (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)))))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {x : PrimeSpectrum.{u1} R _inst_1} {y : PrimeSpectrum.{u1} R _inst_1}, (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y) -> (RingHom.{u1, u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (Semiring.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (CommSemiring.toSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (Localization.instCommSemiringLocalizationToCommMonoid.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y))))) (Semiring.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (CommSemiring.toSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (Localization.instCommSemiringLocalizationToCommMonoid.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x))))))
-Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializesₓ'. -/
/-- If `x` specializes to `y`, then there is a natural map from the localization of `y` to the
localization of `x`. -/
def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
@@ -1474,23 +1069,11 @@ def closedPoint : PrimeSpectrum R :=
variable {R}
-/- warning: local_ring.is_local_ring_hom_iff_comap_closed_point -> LocalRing.isLocalRingHom_iff_comap_closedPoint is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_4)))), Iff (IsLocalRingHom.{u1, u2} R S (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4)) f) (Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_4) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)))), Iff (IsLocalRingHom.{u1, u2} R S (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)) f) (Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (fun (_x : PrimeSpectrum.{u2} S _inst_4) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3))
-Case conversion may be inaccurate. Consider using '#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPointₓ'. -/
theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) :
IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
rw [(local_hom_tfae f).out 0 4, PrimeSpectrum.ext_iff]; rfl
#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPoint
-/- warning: local_ring.comap_closed_point -> LocalRing.comap_closedPoint is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_4)))) [_inst_6 : IsLocalRingHom.{u1, u2} R S (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4)) f], Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_4) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)))) [_inst_6 : IsLocalRingHom.{u1, u2} R S (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)) f], Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (fun (_x : PrimeSpectrum.{u2} S _inst_4) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3)
-Case conversion may be inaccurate. Consider using '#align local_ring.comap_closed_point LocalRing.comap_closedPointₓ'. -/
@[simp]
theorem comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) [IsLocalRingHom f] :
PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
@@ -1503,12 +1086,6 @@ theorem specializes_closedPoint (x : PrimeSpectrum R) : x ⤳ closedPoint R :=
#align local_ring.specializes_closed_point LocalRing.specializes_closedPoint
-/
-/- warning: local_ring.closed_point_mem_iff -> LocalRing.closedPoint_mem_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] (U : TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)), Iff (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3) U) (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) U (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] (U : TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)), Iff (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.instMembership.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3) U) (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) U (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align local_ring.closed_point_mem_iff LocalRing.closedPoint_mem_iffₓ'. -/
theorem closedPoint_mem_iff (U : TopologicalSpace.Opens <| PrimeSpectrum R) :
closedPoint R ∈ U ↔ U = ⊤ := by
constructor
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -140,10 +140,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inl_asIdeal (x : PrimeSpectrum R) :
- ((primeSpectrumProd R S).symm <| Sum.inl x).asIdeal = Ideal.prod x.asIdeal ⊤ :=
- by
- cases x
- rfl
+ ((primeSpectrumProd R S).symm <| Sum.inl x).asIdeal = Ideal.prod x.asIdeal ⊤ := by cases x; rfl
#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal
/- warning: prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal -> PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal is a dubious translation:
@@ -154,10 +151,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
- ((primeSpectrumProd R S).symm <| Sum.inr x).asIdeal = Ideal.prod ⊤ x.asIdeal :=
- by
- cases x
- rfl
+ ((primeSpectrumProd R S).symm <| Sum.inr x).asIdeal = Ideal.prod ⊤ x.asIdeal := by cases x; rfl
#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal
#print PrimeSpectrum.zeroLocus /-
@@ -183,9 +177,7 @@ theorem mem_zeroLocus (x : PrimeSpectrum R) (s : Set R) : x ∈ zeroLocus s ↔
#print PrimeSpectrum.zeroLocus_span /-
@[simp]
-theorem zeroLocus_span (s : Set R) : zeroLocus (Ideal.span s : Set R) = zeroLocus s :=
- by
- ext x
+theorem zeroLocus_span (s : Set R) : zeroLocus (Ideal.span s : Set R) = zeroLocus s := by ext x;
exact (Submodule.gi R R).gc s x.as_ideal
#align prime_spectrum.zero_locus_span PrimeSpectrum.zeroLocus_span
-/
@@ -425,9 +417,7 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
intro x hx
rw [mem_zero_locus] at hx
have x_prime : x.as_ideal.is_prime := by infer_instance
- have eq_top : x.as_ideal = ⊤ := by
- rw [Ideal.eq_top_iff_one]
- exact hx h
+ have eq_top : x.as_ideal = ⊤ := by rw [Ideal.eq_top_iff_one]; exact hx h
apply x_prime.ne_top eq_top
#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_mem
@@ -455,9 +445,7 @@ theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅
intro h
rcases Ideal.exists_le_maximal I h with ⟨M, hM, hIM⟩
exact Set.Nonempty.ne_empty ⟨⟨M, hM.is_prime⟩, hIM⟩
- · rintro rfl
- apply zero_locus_empty_of_one_mem
- trivial
+ · rintro rfl; apply zero_locus_empty_of_one_mem; trivial
#align prime_spectrum.zero_locus_empty_iff_eq_top PrimeSpectrum.zeroLocus_empty_iff_eq_top
#print PrimeSpectrum.zeroLocus_univ /-
@@ -563,10 +551,8 @@ but is expected to have type
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s')) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Inf.inf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instInfSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s'))))
Case conversion may be inaccurate. Consider using '#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocusₓ'. -/
theorem union_zeroLocus (s s' : Set R) :
- zeroLocus s ∪ zeroLocus s' = zeroLocus (Ideal.span s ⊓ Ideal.span s' : Ideal R) :=
- by
- rw [zero_locus_inf]
- simp
+ zeroLocus s ∪ zeroLocus s' = zeroLocus (Ideal.span s ⊓ Ideal.span s' : Ideal R) := by
+ rw [zero_locus_inf]; simp
#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocus
/- warning: prime_spectrum.zero_locus_mul -> PrimeSpectrum.zeroLocus_mul is a dubious translation:
@@ -649,9 +635,7 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
choose f hf using fun i : Zs => h i.Prop
simp only [← hf]
exact ⟨_, zero_locus_Union _⟩)
- (by
- rintro _ ⟨s, rfl⟩ _ ⟨t, rfl⟩
- exact ⟨_, (union_zero_locus s t).symm⟩)
+ (by rintro _ ⟨s, rfl⟩ _ ⟨t, rfl⟩; exact ⟨_, (union_zero_locus s t).symm⟩)
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
-/
@@ -689,9 +673,7 @@ theorem isClosed_iff_zeroLocus_radical_ideal (Z : Set (PrimeSpectrum R)) :
-/
#print PrimeSpectrum.isClosed_zeroLocus /-
-theorem isClosed_zeroLocus (s : Set R) : IsClosed (zeroLocus s) :=
- by
- rw [is_closed_iff_zero_locus]
+theorem isClosed_zeroLocus (s : Set R) : IsClosed (zeroLocus s) := by rw [is_closed_iff_zero_locus];
exact ⟨s, rfl⟩
#align prime_spectrum.is_closed_zero_locus PrimeSpectrum.isClosed_zeroLocus
-/
@@ -807,8 +789,7 @@ theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField
(Classical.not_not.2 rfl))
· refine' ⟨fun x => (is_closed_singleton_iff_is_maximal x).2 _⟩
by_cases hx : x.as_ideal = ⊥
- · letI := h.to_field
- exact hx.symm ▸ Ideal.bot_isMaximal
+ · letI := h.to_field; exact hx.symm ▸ Ideal.bot_isMaximal
· exact absurd h (Ring.not_isField_iff_exists_prime.2 ⟨x.as_ideal, ⟨hx, x.2⟩⟩)
#align prime_spectrum.t1_space_iff_is_field PrimeSpectrum.t1Space_iff_isField
-/
@@ -826,10 +807,8 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
· trans ∀ x y : Ideal R, Z(I) ⊆ Z(x) ∪ Z(y) → Z(I) ⊆ Z(x) ∨ Z(I) ⊆ Z(y)
· simp_rw [isPreirreducible_iff_closed_union_closed, is_closed_iff_zero_locus_ideal]
constructor
- · rintro h x y
- exact h _ _ ⟨x, rfl⟩ ⟨y, rfl⟩
- · rintro h _ _ ⟨x, rfl⟩ ⟨y, rfl⟩
- exact h x y
+ · rintro h x y; exact h _ _ ⟨x, rfl⟩ ⟨y, rfl⟩
+ · rintro h _ _ ⟨x, rfl⟩ ⟨y, rfl⟩; exact h x y
· simp_rw [← zero_locus_inf, subset_zero_locus_iff_le_vanishing_ideal,
vanishing_ideal_zero_locus_eq_radical, hI.radical]
constructor
@@ -918,10 +897,7 @@ theorem comap_asIdeal (y : PrimeSpectrum S) : (comap f y).asIdeal = Ideal.comap
#print PrimeSpectrum.comap_id /-
@[simp]
-theorem comap_id : comap (RingHom.id R) = ContinuousMap.id _ :=
- by
- ext
- rfl
+theorem comap_id : comap (RingHom.id R) = ContinuousMap.id _ := by ext; rfl
#align prime_spectrum.comap_id PrimeSpectrum.comap_id
-/
@@ -1020,8 +996,7 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
rw [preimage_comap_zero_locus, ← zero_locus_span, ← zero_locus_span s]
congr 1
exact congr_arg Submodule.carrier (IsLocalization.map_comap M S (Ideal.span s))
- · rintro ⟨_, ⟨t, rfl⟩, rfl⟩
- simp
+ · rintro ⟨_, ⟨t, rfl⟩, rfl⟩; simp
#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducing
/- warning: prime_spectrum.localization_comap_injective -> PrimeSpectrum.localization_comap_injective is a dubious translation:
@@ -1251,10 +1226,8 @@ lean 3 declaration is
but is expected to have type
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f)
Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_leftₓ'. -/
-theorem basicOpen_mul_le_left (f g : R) : basicOpen (f * g) ≤ basicOpen f :=
- by
- rw [basic_open_mul f g]
- exact inf_le_left
+theorem basicOpen_mul_le_left (f g : R) : basicOpen (f * g) ≤ basicOpen f := by
+ rw [basic_open_mul f g]; exact inf_le_left
#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_left
/- warning: prime_spectrum.basic_open_mul_le_right -> PrimeSpectrum.basicOpen_mul_le_right is a dubious translation:
@@ -1263,10 +1236,8 @@ lean 3 declaration is
but is expected to have type
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)
Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_rightₓ'. -/
-theorem basicOpen_mul_le_right (f g : R) : basicOpen (f * g) ≤ basicOpen g :=
- by
- rw [basic_open_mul f g]
- exact inf_le_right
+theorem basicOpen_mul_le_right (f g : R) : basicOpen (f * g) ≤ basicOpen g := by
+ rw [basic_open_mul f g]; exact inf_le_right
#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_right
/- warning: prime_spectrum.basic_open_pow -> PrimeSpectrum.basicOpen_pow is a dubious translation:
@@ -1377,19 +1348,14 @@ Case conversion may be inaccurate. Consider using '#align prime_spectrum.localiz
theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
- open_range := by
- rw [localization_away_comap_range S r]
- exact is_open_basic_open }
+ open_range := by rw [localization_away_comap_range S r]; exact is_open_basic_open }
#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbedding
end BasicOpen
/-- The prime spectrum of a commutative ring is a compact topological space. -/
instance : CompactSpace (PrimeSpectrum R)
- where isCompact_univ := by
- convert is_compact_basic_open (1 : R)
- rw [basic_open_one]
- rfl
+ where isCompact_univ := by convert is_compact_basic_open (1 : R); rw [basic_open_one]; rfl
section Order
@@ -1515,10 +1481,8 @@ but is expected to have type
forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)))), Iff (IsLocalRingHom.{u1, u2} R S (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)) f) (Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (fun (_x : PrimeSpectrum.{u2} S _inst_4) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3))
Case conversion may be inaccurate. Consider using '#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPointₓ'. -/
theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) :
- IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
- by
- rw [(local_hom_tfae f).out 0 4, PrimeSpectrum.ext_iff]
- rfl
+ IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
+ rw [(local_hom_tfae f).out 0 4, PrimeSpectrum.ext_iff]; rfl
#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPoint
/- warning: local_ring.comap_closed_point -> LocalRing.comap_closedPoint is a dubious translation:
@@ -1548,10 +1512,8 @@ Case conversion may be inaccurate. Consider using '#align local_ring.closed_poin
theorem closedPoint_mem_iff (U : TopologicalSpace.Opens <| PrimeSpectrum R) :
closedPoint R ∈ U ↔ U = ⊤ := by
constructor
- · rw [eq_top_iff]
- exact fun h x _ => (specializes_closed_point x).mem_open U.2 h
- · rintro rfl
- trivial
+ · rw [eq_top_iff]; exact fun h x _ => (specializes_closed_point x).mem_open U.2 h
+ · rintro rfl; trivial
#align local_ring.closed_point_mem_iff LocalRing.closedPoint_mem_iff
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1101,10 +1101,7 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
/- warning: prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap -> PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (forall (I : Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.image.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (HasLiftT.mk.{succ u2, succ u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (CoeTCₓ.coe.{succ u2, succ u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (SetLike.Set.hasCoeT.{u2, u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) S (Submodule.setLike.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))) I))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f I))))
-but is expected to have type
- forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (forall (I : Ideal.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.image.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (SetLike.coe.{u2, u2} (Ideal.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) S (Submodule.setLike.{u2, u2} S S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) I))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f I))))
+<too large>
Case conversion may be inaccurate. Consider using '#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comapₓ'. -/
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
comap f '' zeroLocus I = zeroLocus (I.comap f) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/e1a18cad9cd462973d760af7de36b05776b8811c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module algebraic_geometry.prime_spectrum.basic
-! leanprover-community/mathlib commit a7c017d750512a352b623b1824d75da5998457d0
+! leanprover-community/mathlib commit a87d22575d946e1e156fc1edd1e1269600a8a282
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -20,6 +20,9 @@ import Mathbin.Topology.Sober
/-!
# Prime spectrum of a commutative ring
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
The prime spectrum of a commutative ring is the type of all prime ideals.
It is naturally endowed with a topology: the Zariski topology.
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -56,6 +56,7 @@ universe u v
variable (R : Type u) (S : Type v) [CommRing R] [CommRing S]
+#print PrimeSpectrum /-
/-- The prime spectrum of a commutative ring `R` is the type of all prime ideals of `R`.
It is naturally endowed with a topology (the Zariski topology),
@@ -66,6 +67,7 @@ structure PrimeSpectrum where
asIdeal : Ideal R
IsPrime : as_ideal.IsPrime
#align prime_spectrum PrimeSpectrum
+-/
attribute [instance] PrimeSpectrum.isPrime
@@ -77,13 +79,21 @@ instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
let ⟨I, hI⟩ := Ideal.exists_maximal R
⟨⟨I, hI.IsPrime⟩⟩
+#print PrimeSpectrum.pUnit /-
/-- The prime spectrum of the zero ring is empty. -/
theorem pUnit (x : PrimeSpectrum PUnit) : False :=
x.1.ne_top_iff_one.1 x.2.1 <| Subsingleton.elim (0 : PUnit) 1 ▸ x.1.zero_mem
#align prime_spectrum.punit PrimeSpectrum.pUnit
+-/
variable (R S)
+/- warning: prime_spectrum.prime_spectrum_prod_of_sum -> PrimeSpectrum.primeSpectrumProdOfSum is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))
+but is expected to have type
+ forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_of_sum PrimeSpectrum.primeSpectrumProdOfSumₓ'. -/
/-- The map from the direct sum of prime spectra to the prime spectrum of a direct product. -/
@[simp]
def primeSpectrumProdOfSum : Sum (PrimeSpectrum R) (PrimeSpectrum S) → PrimeSpectrum (R × S)
@@ -91,6 +101,12 @@ def primeSpectrumProdOfSum : Sum (PrimeSpectrum R) (PrimeSpectrum S) → PrimeSp
| Sum.inr ⟨J, hJ⟩ => ⟨Ideal.prod ⊤ J, Ideal.isPrime_ideal_prod_top'⟩
#align prime_spectrum.prime_spectrum_prod_of_sum PrimeSpectrum.primeSpectrumProdOfSum
+/- warning: prime_spectrum.prime_spectrum_prod -> PrimeSpectrum.primeSpectrumProd is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2))
+but is expected to have type
+ forall (R : Type.{u1}) (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S], Equiv.{succ (max u2 u1), max (succ u2) (succ u1)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod PrimeSpectrum.primeSpectrumProdₓ'. -/
/-- The prime spectrum of `R × S` is in bijection with the disjoint unions of the prime spectrum of
`R` and the prime spectrum of `S`. -/
noncomputable def primeSpectrumProd :
@@ -113,6 +129,12 @@ noncomputable def primeSpectrumProd :
variable {R S}
+/- warning: prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal -> PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u1} R _inst_1), Eq.{succ (max u1 u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (Ring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toRing.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) => (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inl.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (Top.top.{u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Submodule.hasTop.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u1} R _inst_1), Eq.{max (succ u1) (succ u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (CommSemiring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toCommSemiring.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (fun (_x : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inl.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (Top.top.{u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Submodule.instTopSubmodule.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inl_asIdeal (x : PrimeSpectrum R) :
((primeSpectrumProd R S).symm <| Sum.inl x).asIdeal = Ideal.prod x.asIdeal ⊤ :=
@@ -121,6 +143,12 @@ theorem primeSpectrumProd_symm_inl_asIdeal (x : PrimeSpectrum R) :
rfl
#align prime_spectrum.prime_spectrum_prod_symm_inl_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inl_asIdeal
+/- warning: prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal -> PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u2} S _inst_2), Eq.{succ (max u1 u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (Ring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toRing.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) => (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) -> (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u1 u2} (Prod.{u1, u2} R S) (Prod.commRing.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inr.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (PrimeSpectrum.asIdeal.{u2} S _inst_2 x))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (x : PrimeSpectrum.{u2} S _inst_2), Eq.{max (succ u1) (succ u2)} (Ideal.{max u1 u2} (Prod.{u1, u2} R S) (CommSemiring.toSemiring.{max u1 u2} (Prod.{u1, u2} R S) (CommRing.toCommSemiring.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)))) (PrimeSpectrum.asIdeal.{max u1 u2} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (fun (_x : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) => PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PrimeSpectrum.{max u2 u1} (Prod.{u1, u2} R S) (Prod.instCommRingProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2)) (PrimeSpectrum.primeSpectrumProd.{u1, u2} R S _inst_1 _inst_2)) (Sum.inr.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) x))) (Ideal.prod.{u1, u2} R S (CommRing.toRing.{u1} R _inst_1) (CommRing.toRing.{u2} S _inst_2) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (PrimeSpectrum.asIdeal.{u2} S _inst_2 x))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdealₓ'. -/
@[simp]
theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
((primeSpectrumProd R S).symm <| Sum.inr x).asIdeal = Ideal.prod ⊤ x.asIdeal :=
@@ -129,6 +157,7 @@ theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
rfl
#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal
+#print PrimeSpectrum.zeroLocus /-
/-- The zero locus of a set `s` of elements of a commutative ring `R` is the set of all prime ideals
of the ring that contain the set `s`.
@@ -140,19 +169,25 @@ At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in
def zeroLocus (s : Set R) : Set (PrimeSpectrum R) :=
{ x | s ⊆ x.asIdeal }
#align prime_spectrum.zero_locus PrimeSpectrum.zeroLocus
+-/
+#print PrimeSpectrum.mem_zeroLocus /-
@[simp]
theorem mem_zeroLocus (x : PrimeSpectrum R) (s : Set R) : x ∈ zeroLocus s ↔ s ⊆ x.asIdeal :=
Iff.rfl
#align prime_spectrum.mem_zero_locus PrimeSpectrum.mem_zeroLocus
+-/
+#print PrimeSpectrum.zeroLocus_span /-
@[simp]
theorem zeroLocus_span (s : Set R) : zeroLocus (Ideal.span s : Set R) = zeroLocus s :=
by
ext x
exact (Submodule.gi R R).gc s x.as_ideal
#align prime_spectrum.zero_locus_span PrimeSpectrum.zeroLocus_span
+-/
+#print PrimeSpectrum.vanishingIdeal /-
/-- The vanishing ideal of a set `t` of points of the prime spectrum of a commutative ring `R` is
the intersection of all the prime ideals in the set `t`.
@@ -164,7 +199,9 @@ consisting of all "functions" that vanish on all of `t`.
def vanishingIdeal (t : Set (PrimeSpectrum R)) : Ideal R :=
⨅ (x : PrimeSpectrum R) (h : x ∈ t), x.asIdeal
#align prime_spectrum.vanishing_ideal PrimeSpectrum.vanishingIdeal
+-/
+#print PrimeSpectrum.coe_vanishingIdeal /-
theorem coe_vanishingIdeal (t : Set (PrimeSpectrum R)) :
(vanishingIdeal t : Set R) = { f : R | ∀ x : PrimeSpectrum R, x ∈ t → f ∈ x.asIdeal } :=
by
@@ -173,17 +210,28 @@ theorem coe_vanishingIdeal (t : Set (PrimeSpectrum R)) :
apply forall_congr'; intro x
rw [Submodule.mem_iInf]
#align prime_spectrum.coe_vanishing_ideal PrimeSpectrum.coe_vanishingIdeal
+-/
+#print PrimeSpectrum.mem_vanishingIdeal /-
theorem mem_vanishingIdeal (t : Set (PrimeSpectrum R)) (f : R) :
f ∈ vanishingIdeal t ↔ ∀ x : PrimeSpectrum R, x ∈ t → f ∈ x.asIdeal := by
rw [← SetLike.mem_coe, coe_vanishing_ideal, Set.mem_setOf_eq]
#align prime_spectrum.mem_vanishing_ideal PrimeSpectrum.mem_vanishingIdeal
+-/
+#print PrimeSpectrum.vanishingIdeal_singleton /-
@[simp]
theorem vanishingIdeal_singleton (x : PrimeSpectrum R) :
vanishingIdeal ({x} : Set (PrimeSpectrum R)) = x.asIdeal := by simp [vanishing_ideal]
#align prime_spectrum.vanishing_ideal_singleton PrimeSpectrum.vanishingIdeal_singleton
+-/
+/- warning: prime_spectrum.subset_zero_locus_iff_le_vanishing_ideal -> PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) t (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I))) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) t (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I))) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.subset_zero_locus_iff_le_vanishing_ideal PrimeSpectrum.subset_zeroLocus_iff_le_vanishingIdealₓ'. -/
theorem subset_zeroLocus_iff_le_vanishingIdeal (t : Set (PrimeSpectrum R)) (I : Ideal R) :
t ⊆ zeroLocus I ↔ I ≤ vanishingIdeal t :=
⟨fun h f k => (mem_vanishingIdeal _ _).mpr fun x j => (mem_zeroLocus _ _).mpr (h j) k, fun h =>
@@ -194,6 +242,12 @@ section Gc
variable (R)
+/- warning: prime_spectrum.gc -> PrimeSpectrum.gc is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.completeBooleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t)
+but is expected to have type
+ forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instCompleteBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.gc PrimeSpectrum.gcₓ'. -/
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc :
@GaloisConnection (Ideal R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun I => zeroLocus I) fun t =>
@@ -201,6 +255,12 @@ theorem gc :
fun I t => subset_zeroLocus_iff_le_vanishingIdeal t I
#align prime_spectrum.gc PrimeSpectrum.gc
+/- warning: prime_spectrum.gc_set -> PrimeSpectrum.gc_set is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Set.{u1} R) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.completeBooleanAlgebra.{u1} R))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.completeBooleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (s : Set.{u1} R) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
+but is expected to have type
+ forall (R : Type.{u1}) [_inst_1 : CommRing.{u1} R], GaloisConnection.{u1, u1} (Set.{u1} R) (OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R))))))) (OrderDual.preorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instCompleteBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))))))) (fun (s : Set.{u1} R) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (fun (t : OrderDual.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))) => SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.gc_set PrimeSpectrum.gc_setₓ'. -/
/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
theorem gc_set :
@GaloisConnection (Set R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun s => zeroLocus s) fun t =>
@@ -210,21 +270,32 @@ theorem gc_set :
simpa [zero_locus_span, Function.comp] using ideal_gc.compose (gc R)
#align prime_spectrum.gc_set PrimeSpectrum.gc_set
+#print PrimeSpectrum.subset_zeroLocus_iff_subset_vanishingIdeal /-
theorem subset_zeroLocus_iff_subset_vanishingIdeal (t : Set (PrimeSpectrum R)) (s : Set R) :
t ⊆ zeroLocus s ↔ s ⊆ vanishingIdeal t :=
(gc_set R) s t
#align prime_spectrum.subset_zero_locus_iff_subset_vanishing_ideal PrimeSpectrum.subset_zeroLocus_iff_subset_vanishingIdeal
+-/
end Gc
+#print PrimeSpectrum.subset_vanishingIdeal_zeroLocus /-
theorem subset_vanishingIdeal_zeroLocus (s : Set R) : s ⊆ vanishingIdeal (zeroLocus s) :=
(gc_set R).le_u_l s
#align prime_spectrum.subset_vanishing_ideal_zero_locus PrimeSpectrum.subset_vanishingIdeal_zeroLocus
+-/
+/- warning: prime_spectrum.le_vanishing_ideal_zero_locus -> PrimeSpectrum.le_vanishingIdeal_zeroLocus is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) I (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_vanishing_ideal_zero_locus PrimeSpectrum.le_vanishingIdeal_zeroLocusₓ'. -/
theorem le_vanishingIdeal_zeroLocus (I : Ideal R) : I ≤ vanishingIdeal (zeroLocus I) :=
(gc R).le_u_l I
#align prime_spectrum.le_vanishing_ideal_zero_locus PrimeSpectrum.le_vanishingIdeal_zeroLocus
+#print PrimeSpectrum.vanishingIdeal_zeroLocus_eq_radical /-
@[simp]
theorem vanishingIdeal_zeroLocus_eq_radical (I : Ideal R) :
vanishingIdeal (zeroLocus (I : Set R)) = I.radical :=
@@ -233,31 +304,56 @@ theorem vanishingIdeal_zeroLocus_eq_radical (I : Ideal R) :
rw [mem_vanishing_ideal, Ideal.radical_eq_sInf, Submodule.mem_sInf]
exact ⟨fun h x hx => h ⟨x, hx.2⟩ hx.1, fun h x hx => h x.1 ⟨hx, x.2⟩⟩
#align prime_spectrum.vanishing_ideal_zero_locus_eq_radical PrimeSpectrum.vanishingIdeal_zeroLocus_eq_radical
+-/
+#print PrimeSpectrum.zeroLocus_radical /-
@[simp]
theorem zeroLocus_radical (I : Ideal R) : zeroLocus (I.radical : Set R) = zeroLocus I :=
vanishingIdeal_zeroLocus_eq_radical I ▸ (gc R).l_u_l_eq_l I
#align prime_spectrum.zero_locus_radical PrimeSpectrum.zeroLocus_radical
+-/
+#print PrimeSpectrum.subset_zeroLocus_vanishingIdeal /-
theorem subset_zeroLocus_vanishingIdeal (t : Set (PrimeSpectrum R)) :
t ⊆ zeroLocus (vanishingIdeal t) :=
(gc R).l_u_le t
#align prime_spectrum.subset_zero_locus_vanishing_ideal PrimeSpectrum.subset_zeroLocus_vanishingIdeal
+-/
+#print PrimeSpectrum.zeroLocus_anti_mono /-
theorem zeroLocus_anti_mono {s t : Set R} (h : s ⊆ t) : zeroLocus t ⊆ zeroLocus s :=
(gc_set R).monotone_l h
#align prime_spectrum.zero_locus_anti_mono PrimeSpectrum.zeroLocus_anti_mono
+-/
+/- warning: prime_spectrum.zero_locus_anti_mono_ideal -> PrimeSpectrum.zeroLocus_anti_mono_ideal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))} {t : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))}, (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) s t) -> (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) t)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) s)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))} {t : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))}, (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) s t) -> (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) t)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) s)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_anti_mono_ideal PrimeSpectrum.zeroLocus_anti_mono_idealₓ'. -/
theorem zeroLocus_anti_mono_ideal {s t : Ideal R} (h : s ≤ t) :
zeroLocus (t : Set R) ⊆ zeroLocus (s : Set R) :=
(gc R).monotone_l h
#align prime_spectrum.zero_locus_anti_mono_ideal PrimeSpectrum.zeroLocus_anti_mono_ideal
+/- warning: prime_spectrum.vanishing_ideal_anti_mono -> PrimeSpectrum.vanishingIdeal_anti_mono is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) -> (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) -> (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_monoₓ'. -/
theorem vanishingIdeal_anti_mono {s t : Set (PrimeSpectrum R)} (h : s ⊆ t) :
vanishingIdeal t ≤ vanishingIdeal s :=
(gc R).monotone_u h
#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_mono
+/- warning: prime_spectrum.zero_locus_subset_zero_locus_iff -> PrimeSpectrum.zeroLocus_subset_zeroLocus_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J))) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) I))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J))) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) J (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) I))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_subset_zero_locus_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_iffₓ'. -/
theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
zeroLocus (I : Set R) ⊆ zeroLocus (J : Set R) ↔ J ≤ I.radical :=
⟨fun h =>
@@ -267,31 +363,59 @@ theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
fun h => zeroLocus_radical I ▸ zeroLocus_anti_mono_ideal h⟩
#align prime_spectrum.zero_locus_subset_zero_locus_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_iff
+#print PrimeSpectrum.zeroLocus_subset_zeroLocus_singleton_iff /-
theorem zeroLocus_subset_zeroLocus_singleton_iff (f g : R) :
zeroLocus ({f} : Set R) ⊆ zeroLocus {g} ↔ g ∈ (Ideal.span ({f} : Set R)).radical := by
rw [← zero_locus_span {f}, ← zero_locus_span {g}, zero_locus_subset_zero_locus_iff, Ideal.span_le,
Set.singleton_subset_iff, SetLike.mem_coe]
#align prime_spectrum.zero_locus_subset_zero_locus_singleton_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_singleton_iff
+-/
+/- warning: prime_spectrum.zero_locus_bot -> PrimeSpectrum.zeroLocus_bot is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Bot.bot.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasBot.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Bot.bot.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instBotSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_bot PrimeSpectrum.zeroLocus_botₓ'. -/
theorem zeroLocus_bot : zeroLocus ((⊥ : Ideal R) : Set R) = Set.univ :=
(gc R).l_bot
#align prime_spectrum.zero_locus_bot PrimeSpectrum.zeroLocus_bot
+/- warning: prime_spectrum.zero_locus_singleton_zero -> PrimeSpectrum.zeroLocus_singleton_zero is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (Set.univ.{u1} (PrimeSpectrum.{u1} R _inst_1))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_zero PrimeSpectrum.zeroLocus_singleton_zeroₓ'. -/
@[simp]
theorem zeroLocus_singleton_zero : zeroLocus ({0} : Set R) = Set.univ :=
zeroLocus_bot
#align prime_spectrum.zero_locus_singleton_zero PrimeSpectrum.zeroLocus_singleton_zero
+#print PrimeSpectrum.zeroLocus_empty /-
@[simp]
theorem zeroLocus_empty : zeroLocus (∅ : Set R) = Set.univ :=
(gc_set R).l_bot
#align prime_spectrum.zero_locus_empty PrimeSpectrum.zeroLocus_empty
+-/
+/- warning: prime_spectrum.vanishing_ideal_univ -> PrimeSpectrum.vanishingIdeal_univ is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_univ PrimeSpectrum.vanishingIdeal_univₓ'. -/
@[simp]
theorem vanishingIdeal_univ : vanishingIdeal (∅ : Set (PrimeSpectrum R)) = ⊤ := by
simpa using (gc R).u_top
#align prime_spectrum.vanishing_ideal_univ PrimeSpectrum.vanishingIdeal_univ
+/- warning: prime_spectrum.zero_locus_empty_of_one_mem -> PrimeSpectrum.zeroLocus_empty_of_one_mem is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} R}, (Membership.Mem.{u1, u1} R (Set.{u1} R) (Set.hasMem.{u1} R) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))) s) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} R}, (Membership.mem.{u1, u1} R (Set.{u1} R) (Set.instMembershipSet.{u1} R) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) s) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_memₓ'. -/
theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s = ∅ :=
by
rw [Set.eq_empty_iff_forall_not_mem]
@@ -304,11 +428,23 @@ theorem zeroLocus_empty_of_one_mem {s : Set R} (h : (1 : R) ∈ s) : zeroLocus s
apply x_prime.ne_top eq_top
#align prime_spectrum.zero_locus_empty_of_one_mem PrimeSpectrum.zeroLocus_empty_of_one_mem
+/- warning: prime_spectrum.zero_locus_singleton_one -> PrimeSpectrum.zeroLocus_singleton_one is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_one PrimeSpectrum.zeroLocus_singleton_oneₓ'. -/
@[simp]
theorem zeroLocus_singleton_one : zeroLocus ({1} : Set R) = ∅ :=
zeroLocus_empty_of_one_mem (Set.mem_singleton (1 : R))
#align prime_spectrum.zero_locus_singleton_one PrimeSpectrum.zeroLocus_singleton_one
+/- warning: prime_spectrum.zero_locus_empty_iff_eq_top -> PrimeSpectrum.zeroLocus_empty_iff_eq_top is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))}, Iff (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) I (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))}, Iff (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)))) (Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_empty_iff_eq_top PrimeSpectrum.zeroLocus_empty_iff_eq_topₓ'. -/
theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅ ↔ I = ⊤ :=
by
constructor
@@ -321,54 +457,108 @@ theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅
trivial
#align prime_spectrum.zero_locus_empty_iff_eq_top PrimeSpectrum.zeroLocus_empty_iff_eq_top
+#print PrimeSpectrum.zeroLocus_univ /-
@[simp]
theorem zeroLocus_univ : zeroLocus (Set.univ : Set R) = ∅ :=
zeroLocus_empty_of_one_mem (Set.mem_univ 1)
#align prime_spectrum.zero_locus_univ PrimeSpectrum.zeroLocus_univ
+-/
+/- warning: prime_spectrum.vanishing_ideal_eq_top_iff -> PrimeSpectrum.vanishingIdeal_eq_top_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, Iff (Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s) (Top.top.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasTop.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasEmptyc.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, Iff (Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s) (Top.top.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instTopSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instEmptyCollectionSet.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_eq_top_iff PrimeSpectrum.vanishingIdeal_eq_top_iffₓ'. -/
theorem vanishingIdeal_eq_top_iff {s : Set (PrimeSpectrum R)} : vanishingIdeal s = ⊤ ↔ s = ∅ := by
rw [← top_le_iff, ← subset_zero_locus_iff_le_vanishing_ideal, Submodule.top_coe, zero_locus_univ,
Set.subset_empty_iff]
#align prime_spectrum.vanishing_ideal_eq_top_iff PrimeSpectrum.vanishingIdeal_eq_top_iff
+/- warning: prime_spectrum.zero_locus_sup -> PrimeSpectrum.zeroLocus_sup is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Sup.sup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SemilatticeSup.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (IdemSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.idemSemiring.{u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) I J))) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Sup.sup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SemilatticeSup.toSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (IdemCommSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instIdemCommSemiringIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I J))) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_sup PrimeSpectrum.zeroLocus_supₓ'. -/
theorem zeroLocus_sup (I J : Ideal R) :
zeroLocus ((I ⊔ J : Ideal R) : Set R) = zeroLocus I ∩ zeroLocus J :=
(gc R).l_sup
#align prime_spectrum.zero_locus_sup PrimeSpectrum.zeroLocus_sup
+/- warning: prime_spectrum.zero_locus_union -> PrimeSpectrum.zeroLocus_union is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Union.union.{u1} (Set.{u1} R) (Set.hasUnion.{u1} R) s s')) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s'))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Union.union.{u1} (Set.{u1} R) (Set.instUnionSet.{u1} R) s s')) (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s'))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_union PrimeSpectrum.zeroLocus_unionₓ'. -/
theorem zeroLocus_union (s s' : Set R) : zeroLocus (s ∪ s') = zeroLocus s ∩ zeroLocus s' :=
(gc_set R).l_sup
#align prime_spectrum.zero_locus_union PrimeSpectrum.zeroLocus_union
+#print PrimeSpectrum.vanishingIdeal_union /-
theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
vanishingIdeal (t ∪ t') = vanishingIdeal t ⊓ vanishingIdeal t' :=
(gc R).u_inf
#align prime_spectrum.vanishing_ideal_union PrimeSpectrum.vanishingIdeal_union
+-/
+/- warning: prime_spectrum.zero_locus_supr -> PrimeSpectrum.zeroLocus_iSup is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (I : ι -> (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (iSup.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (ConditionallyCompleteLattice.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) ι (fun (i : ι) => I i)))) (Set.iInter.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (I i))))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (I : ι -> (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} R _inst_1)) (PrimeSpectrum.zeroLocus.{u2} R _inst_1 (SetLike.coe.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) (iSup.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (ConditionallyCompleteLattice.toSupSet.{u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Submodule.completeLattice.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))))) ι (fun (i : ι) => I i)))) (Set.iInter.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u2} R _inst_1 (SetLike.coe.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) (I i))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSupₓ'. -/
theorem zeroLocus_iSup {ι : Sort _} (I : ι → Ideal R) :
zeroLocus ((⨆ i, I i : Ideal R) : Set R) = ⋂ i, zeroLocus (I i) :=
(gc R).l_iSup
#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSup
+/- warning: prime_spectrum.zero_locus_Union -> PrimeSpectrum.zeroLocus_iUnion is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (s : ι -> (Set.{u1} R)), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Set.iUnion.{u1, u2} R ι (fun (i : ι) => s i))) (Set.iInter.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u1} R _inst_1 (s i)))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (s : ι -> (Set.{u2} R)), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} R _inst_1)) (PrimeSpectrum.zeroLocus.{u2} R _inst_1 (Set.iUnion.{u2, u1} R ι (fun (i : ι) => s i))) (Set.iInter.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => PrimeSpectrum.zeroLocus.{u2} R _inst_1 (s i)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnionₓ'. -/
theorem zeroLocus_iUnion {ι : Sort _} (s : ι → Set R) :
zeroLocus (⋃ i, s i) = ⋂ i, zeroLocus (s i) :=
(gc_set R).l_iSup
#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnion
+#print PrimeSpectrum.zeroLocus_bUnion /-
theorem zeroLocus_bUnion (s : Set (Set R)) :
zeroLocus (⋃ s' ∈ s, s' : Set R) = ⋂ s' ∈ s, zeroLocus s' := by simp only [zero_locus_Union]
#align prime_spectrum.zero_locus_bUnion PrimeSpectrum.zeroLocus_bUnion
+-/
+/- warning: prime_spectrum.vanishing_ideal_Union -> PrimeSpectrum.vanishingIdeal_iUnion is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {ι : Sort.{u2}} (t : ι -> (Set.{u1} (PrimeSpectrum.{u1} R _inst_1))), Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Set.iUnion.{u1, u2} (PrimeSpectrum.{u1} R _inst_1) ι (fun (i : ι) => t i))) (iInf.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) ι (fun (i : ι) => PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (t i)))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : CommRing.{u2} R] {ι : Sort.{u1}} (t : ι -> (Set.{u2} (PrimeSpectrum.{u2} R _inst_1))), Eq.{succ u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (PrimeSpectrum.vanishingIdeal.{u2} R _inst_1 (Set.iUnion.{u2, u1} (PrimeSpectrum.{u2} R _inst_1) ι (fun (i : ι) => t i))) (iInf.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Submodule.instInfSetSubmodule.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1)))) ι (fun (i : ι) => PrimeSpectrum.vanishingIdeal.{u2} R _inst_1 (t i)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnionₓ'. -/
theorem vanishingIdeal_iUnion {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
vanishingIdeal (⋃ i, t i) = ⨅ i, vanishingIdeal (t i) :=
(gc R).u_iInf
#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnion
+/- warning: prime_spectrum.zero_locus_inf -> PrimeSpectrum.zeroLocus_inf is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Inf.inf.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Inf.inf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instInfSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_inf PrimeSpectrum.zeroLocus_infₓ'. -/
theorem zeroLocus_inf (I J : Ideal R) :
zeroLocus ((I ⊓ J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.inf_le
#align prime_spectrum.zero_locus_inf PrimeSpectrum.zeroLocus_inf
+/- warning: prime_spectrum.union_zero_locus -> PrimeSpectrum.union_zeroLocus is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s')) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Inf.inf.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.hasInf.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (Ideal.span.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) s) (Ideal.span.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) s'))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (s : Set.{u1} R) (s' : Set.{u1} R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s')) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Inf.inf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.instInfSubmodule.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) s'))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocusₓ'. -/
theorem union_zeroLocus (s s' : Set R) :
zeroLocus s ∪ zeroLocus s' = zeroLocus (Ideal.span s ⊓ Ideal.span s' : Ideal R) :=
by
@@ -376,28 +566,54 @@ theorem union_zeroLocus (s s' : Set R) :
simp
#align prime_spectrum.union_zero_locus PrimeSpectrum.union_zeroLocus
+/- warning: prime_spectrum.zero_locus_mul -> PrimeSpectrum.zeroLocus_mul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (J : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (HMul.hMul.{u1, u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (instHMul.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Ideal.hasMul.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) J)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (J : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (HMul.hMul.{u1, u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (instHMul.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instMulIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) I J))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) I)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) J)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_mul PrimeSpectrum.zeroLocus_mulₓ'. -/
theorem zeroLocus_mul (I J : Ideal R) :
zeroLocus ((I * J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
Set.ext fun x => x.2.mul_le
#align prime_spectrum.zero_locus_mul PrimeSpectrum.zeroLocus_mul
+/- warning: prime_spectrum.zero_locus_singleton_mul -> PrimeSpectrum.zeroLocus_singleton_mul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasUnion.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) g)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g))) (Union.union.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instUnionSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) g)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_mul PrimeSpectrum.zeroLocus_singleton_mulₓ'. -/
theorem zeroLocus_singleton_mul (f g : R) :
zeroLocus ({f * g} : Set R) = zeroLocus {f} ∪ zeroLocus {g} :=
Set.ext fun x => by simpa using x.2.mul_mem_iff_mem_or_mem
#align prime_spectrum.zero_locus_singleton_mul PrimeSpectrum.zeroLocus_singleton_mul
+#print PrimeSpectrum.zeroLocus_pow /-
@[simp]
theorem zeroLocus_pow (I : Ideal R) {n : ℕ} (hn : 0 < n) :
zeroLocus ((I ^ n : Ideal R) : Set R) = zeroLocus I :=
zeroLocus_radical (I ^ n) ▸ (I.radical_pow n hn).symm ▸ zeroLocus_radical I
#align prime_spectrum.zero_locus_pow PrimeSpectrum.zeroLocus_pow
+-/
+/- warning: prime_spectrum.zero_locus_singleton_pow -> PrimeSpectrum.zeroLocus_singleton_pow is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f n))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) f n))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.zero_locus_singleton_pow PrimeSpectrum.zeroLocus_singleton_powₓ'. -/
@[simp]
theorem zeroLocus_singleton_pow (f : R) (n : ℕ) (hn : 0 < n) :
zeroLocus ({f ^ n} : Set R) = zeroLocus {f} :=
Set.ext fun x => by simpa using x.2.pow_mem_iff_mem n hn
#align prime_spectrum.zero_locus_singleton_pow PrimeSpectrum.zeroLocus_singleton_pow
+/- warning: prime_spectrum.sup_vanishing_ideal_le -> PrimeSpectrum.sup_vanishingIdeal_le is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (t' : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Sup.sup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SemilatticeSup.toHasSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (IdemSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Submodule.idemSemiring.{u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Algebra.id.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t')) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasInter.{u1} (PrimeSpectrum.{u1} R _inst_1)) t t'))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (t' : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (Sup.sup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SemilatticeSup.toSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (IdemCommSemiring.toSemilatticeSup.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Ideal.instIdemCommSemiringIdealToSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t')) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 (Inter.inter.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instInterSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) t t'))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_leₓ'. -/
theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
vanishingIdeal t ⊔ vanishingIdeal t' ≤ vanishingIdeal (t ∩ t') :=
by
@@ -408,11 +624,18 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
apply Submodule.add_mem <;> solve_by_elim
#align prime_spectrum.sup_vanishing_ideal_le PrimeSpectrum.sup_vanishingIdeal_le
+/- warning: prime_spectrum.mem_compl_zero_locus_iff_not_mem -> PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {f : R} {I : PrimeSpectrum.{u1} R _inst_1}, Iff (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasMem.{u1} (PrimeSpectrum.{u1} R _inst_1)) I (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) f)))) (Not (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f (PrimeSpectrum.asIdeal.{u1} R _inst_1 I)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {f : R} {I : PrimeSpectrum.{u1} R _inst_1}, Iff (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instMembershipSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) I (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) f)))) (Not (Membership.mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.instMembership.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (PrimeSpectrum.asIdeal.{u1} R _inst_1 I)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_memₓ'. -/
theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
I ∈ (zeroLocus {f} : Set (PrimeSpectrum R))ᶜ ↔ f ∉ I.asIdeal := by
rw [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff] <;> rfl
#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem
+#print PrimeSpectrum.zariskiTopology /-
/-- The Zariski topology on the prime spectrum of a commutative ring is defined via the closed sets
of the topology: they are exactly those sets that are the zero locus of a subset of the ring. -/
instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
@@ -427,34 +650,50 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
rintro _ ⟨s, rfl⟩ _ ⟨t, rfl⟩
exact ⟨_, (union_zero_locus s t).symm⟩)
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
+-/
+/- warning: prime_spectrum.is_open_iff -> PrimeSpectrum.isOpen_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (U : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), Iff (IsOpen.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) U) (Exists.{succ u1} (Set.{u1} R) (fun (s : Set.{u1} R) => Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) U) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (U : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)), Iff (IsOpen.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) U) (Exists.{succ u1} (Set.{u1} R) (fun (s : Set.{u1} R) => Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) U) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iffₓ'. -/
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
simp only [@eq_comm _ (Uᶜ)] <;> rfl
#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iff
+#print PrimeSpectrum.isClosed_iff_zeroLocus /-
theorem isClosed_iff_zeroLocus (Z : Set (PrimeSpectrum R)) : IsClosed Z ↔ ∃ s, Z = zeroLocus s := by
rw [← isOpen_compl_iff, is_open_iff, compl_compl]
#align prime_spectrum.is_closed_iff_zero_locus PrimeSpectrum.isClosed_iff_zeroLocus
+-/
+#print PrimeSpectrum.isClosed_iff_zeroLocus_ideal /-
theorem isClosed_iff_zeroLocus_ideal (Z : Set (PrimeSpectrum R)) :
IsClosed Z ↔ ∃ I : Ideal R, Z = zeroLocus I :=
(isClosed_iff_zeroLocus _).trans
⟨fun ⟨s, hs⟩ => ⟨_, (zeroLocus_span s).substr hs⟩, fun ⟨I, hI⟩ => ⟨I, hI⟩⟩
#align prime_spectrum.is_closed_iff_zero_locus_ideal PrimeSpectrum.isClosed_iff_zeroLocus_ideal
+-/
+#print PrimeSpectrum.isClosed_iff_zeroLocus_radical_ideal /-
theorem isClosed_iff_zeroLocus_radical_ideal (Z : Set (PrimeSpectrum R)) :
IsClosed Z ↔ ∃ I : Ideal R, I.IsRadical ∧ Z = zeroLocus I :=
(isClosed_iff_zeroLocus_ideal _).trans
⟨fun ⟨I, hI⟩ => ⟨_, I.radical_isRadical, (zeroLocus_radical I).substr hI⟩, fun ⟨I, _, hI⟩ =>
⟨I, hI⟩⟩
#align prime_spectrum.is_closed_iff_zero_locus_radical_ideal PrimeSpectrum.isClosed_iff_zeroLocus_radical_ideal
+-/
+#print PrimeSpectrum.isClosed_zeroLocus /-
theorem isClosed_zeroLocus (s : Set R) : IsClosed (zeroLocus s) :=
by
rw [is_closed_iff_zero_locus]
exact ⟨s, rfl⟩
#align prime_spectrum.is_closed_zero_locus PrimeSpectrum.isClosed_zeroLocus
+-/
+#print PrimeSpectrum.isClosed_singleton_iff_isMaximal /-
theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
IsClosed ({x} : Set (PrimeSpectrum R)) ↔ x.asIdeal.IsMaximal :=
by
@@ -474,7 +713,9 @@ theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
rw [eq_comm, Set.eq_singleton_iff_unique_mem]
refine' ⟨fun _ h => h, fun y hy => PrimeSpectrum.ext _ _ (h.eq_of_le y.2.ne_top hy).symm⟩
#align prime_spectrum.is_closed_singleton_iff_is_maximal PrimeSpectrum.isClosed_singleton_iff_isMaximal
+-/
+#print PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure /-
theorem zeroLocus_vanishingIdeal_eq_closure (t : Set (PrimeSpectrum R)) :
zeroLocus (vanishingIdeal t : Set R) = closure t :=
by
@@ -486,23 +727,36 @@ theorem zeroLocus_vanishingIdeal_eq_closure (t : Set (PrimeSpectrum R)) :
· rw [(is_closed_zero_locus _).closure_subset_iff]
exact subset_zero_locus_vanishing_ideal t
#align prime_spectrum.zero_locus_vanishing_ideal_eq_closure PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure
+-/
+#print PrimeSpectrum.vanishingIdeal_closure /-
theorem vanishingIdeal_closure (t : Set (PrimeSpectrum R)) :
vanishingIdeal (closure t) = vanishingIdeal t :=
zeroLocus_vanishingIdeal_eq_closure t ▸ (gc R).u_l_u_eq_u t
#align prime_spectrum.vanishing_ideal_closure PrimeSpectrum.vanishingIdeal_closure
+-/
+#print PrimeSpectrum.closure_singleton /-
theorem closure_singleton (x) : closure ({x} : Set (PrimeSpectrum R)) = zeroLocus x.asIdeal := by
rw [← zero_locus_vanishing_ideal_eq_closure, vanishing_ideal_singleton]
#align prime_spectrum.closure_singleton PrimeSpectrum.closure_singleton
+-/
+#print PrimeSpectrum.isRadical_vanishingIdeal /-
theorem isRadical_vanishingIdeal (s : Set (PrimeSpectrum R)) : (vanishingIdeal s).IsRadical :=
by
rw [← vanishing_ideal_closure, ← zero_locus_vanishing_ideal_eq_closure,
vanishing_ideal_zero_locus_eq_radical]
apply Ideal.radical_isRadical
#align prime_spectrum.is_radical_vanishing_ideal PrimeSpectrum.isRadical_vanishingIdeal
+-/
+/- warning: prime_spectrum.vanishing_ideal_anti_mono_iff -> PrimeSpectrum.vanishingIdeal_anti_mono_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iffₓ'. -/
theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClosed t) :
s ⊆ t ↔ vanishingIdeal t ≤ vanishingIdeal s :=
⟨vanishingIdeal_anti_mono, fun h =>
@@ -511,12 +765,24 @@ theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClose
convert← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iff
+/- warning: prime_spectrum.vanishing_ideal_strict_anti_mono_iff -> PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) s) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSSubset.SSubset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSsubset.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LT.lt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {s : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)} {t : Set.{u1} (PrimeSpectrum.{u1} R _inst_1)}, (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) s) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) t) -> (Iff (HasSSubset.SSubset.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instHasSSubsetSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) s t) (LT.lt.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLT.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 t) (PrimeSpectrum.vanishingIdeal.{u1} R _inst_1 s)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iffₓ'. -/
theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs : IsClosed s)
(ht : IsClosed t) : s ⊂ t ↔ vanishingIdeal t < vanishingIdeal s := by
rw [Set.ssubset_def, vanishing_ideal_anti_mono_iff hs, vanishing_ideal_anti_mono_iff ht,
lt_iff_le_not_le]
#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff
+/- warning: prime_spectrum.closeds_embedding -> PrimeSpectrum.closedsEmbedding is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) [_inst_3 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (OrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (OrderDual.hasLe.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (Preorder.toHasLe.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PrimeSpectrum.{u1} R _inst_3) (TopologicalSpace.Closeds.setLike.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)))))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_3)))))))
+but is expected to have type
+ forall (R : Type.{u1}) [_inst_3 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (OrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))) (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (OrderDual.instLEOrderDual.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (Preorder.toLE.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Closeds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3)) (TopologicalSpace.Closeds.instCompleteLatticeCloseds.{u1} (PrimeSpectrum.{u1} R _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_3))))))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_3))))))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbeddingₓ'. -/
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
def closedsEmbedding (R : Type _) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
@@ -524,6 +790,7 @@ def closedsEmbedding (R : Type _) [CommRing R] :
(vanishingIdeal_anti_mono_iff s.2).symm
#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbedding
+#print PrimeSpectrum.t1Space_iff_isField /-
theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField R :=
by
refine' ⟨_, fun h => _⟩
@@ -541,10 +808,12 @@ theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField
exact hx.symm ▸ Ideal.bot_isMaximal
· exact absurd h (Ring.not_isField_iff_exists_prime.2 ⟨x.as_ideal, ⟨hx, x.2⟩⟩)
#align prime_spectrum.t1_space_iff_is_field PrimeSpectrum.t1Space_iff_isField
+-/
-- mathport name: «exprZ( )»
local notation "Z(" a ")" => zeroLocus (a : Set R)
+#print PrimeSpectrum.isIrreducible_zeroLocus_iff_of_radical /-
theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical) :
IsIrreducible (zeroLocus (I : Set R)) ↔ I.IsPrime :=
by
@@ -570,17 +839,22 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
rintro h s t h' ⟨x, hx, hx'⟩ y hy
exact h (h' ⟨Ideal.mul_mem_right _ _ hx, Ideal.mul_mem_left _ _ hy⟩) hx'
#align prime_spectrum.is_irreducible_zero_locus_iff_of_radical PrimeSpectrum.isIrreducible_zeroLocus_iff_of_radical
+-/
+#print PrimeSpectrum.isIrreducible_zeroLocus_iff /-
theorem isIrreducible_zeroLocus_iff (I : Ideal R) :
IsIrreducible (zeroLocus (I : Set R)) ↔ I.radical.IsPrime :=
zeroLocus_radical I ▸ isIrreducible_zeroLocus_iff_of_radical _ I.radical_isRadical
#align prime_spectrum.is_irreducible_zero_locus_iff PrimeSpectrum.isIrreducible_zeroLocus_iff
+-/
+#print PrimeSpectrum.isIrreducible_iff_vanishingIdeal_isPrime /-
theorem isIrreducible_iff_vanishingIdeal_isPrime {s : Set (PrimeSpectrum R)} :
IsIrreducible s ↔ (vanishingIdeal s).IsPrime := by
rw [← isIrreducible_iff_closure, ← zero_locus_vanishing_ideal_eq_closure,
is_irreducible_zero_locus_iff_of_radical _ (is_radical_vanishing_ideal s)]
#align prime_spectrum.is_irreducible_iff_vanishing_ideal_is_prime PrimeSpectrum.isIrreducible_iff_vanishingIdeal_isPrime
+-/
instance [IsDomain R] : IrreducibleSpace (PrimeSpectrum R) :=
by
@@ -596,6 +870,12 @@ section Comap
variable {S' : Type _} [CommRing S']
+/- warning: prime_spectrum.preimage_comap_zero_locus_aux -> PrimeSpectrum.preimage_comap_zeroLocus_aux is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (fun (y : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.mk.{u1} R _inst_1 (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y)) (inferInstance.{0} (Ideal.IsPrime.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))) (Ideal.IsPrime.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y) (PrimeSpectrum.isPrime.{u2} S _inst_2 y)))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f) s))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (fun (y : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.mk.{u1} R _inst_1 (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y)) (inferInstance.{0} (Ideal.IsPrime.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))) (Ideal.IsPrime.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y) (PrimeSpectrum.IsPrime.{u2} S _inst_2 y)))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f) s))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_auxₓ'. -/
theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
(fun y => ⟨Ideal.comap f y.asIdeal, inferInstance⟩ : PrimeSpectrum S → PrimeSpectrum R) ⁻¹'
zeroLocus s =
@@ -606,6 +886,7 @@ theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
rfl
#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_aux
+#print PrimeSpectrum.comap /-
/-- The function between prime spectra of commutative rings induced by a ring homomorphism.
This function is continuous. -/
def comap (f : R →+* S) : C(PrimeSpectrum S, PrimeSpectrum R)
@@ -617,36 +898,69 @@ def comap (f : R →+* S) : C(PrimeSpectrum S, PrimeSpectrum R)
rintro _ ⟨s, rfl⟩
exact ⟨_, preimage_comap_zero_locus_aux f s⟩
#align prime_spectrum.comap PrimeSpectrum.comap
+-/
variable (f : R →+* S)
+/- warning: prime_spectrum.comap_as_ideal -> PrimeSpectrum.comap_asIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (y : PrimeSpectrum.{u2} S _inst_2), Eq.{succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) y)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (y : PrimeSpectrum.{u2} S _inst_2), Eq.{succ u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) y)) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f (PrimeSpectrum.asIdeal.{u2} S _inst_2 y))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_as_ideal PrimeSpectrum.comap_asIdealₓ'. -/
@[simp]
theorem comap_asIdeal (y : PrimeSpectrum S) : (comap f y).asIdeal = Ideal.comap f y.asIdeal :=
rfl
#align prime_spectrum.comap_as_ideal PrimeSpectrum.comap_asIdeal
+#print PrimeSpectrum.comap_id /-
@[simp]
theorem comap_id : comap (RingHom.id R) = ContinuousMap.id _ :=
by
ext
rfl
#align prime_spectrum.comap_id PrimeSpectrum.comap_id
+-/
+/- warning: prime_spectrum.comap_comp -> PrimeSpectrum.comap_comp is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] {S' : Type.{u3}} [_inst_3 : CommRing.{u3} S'] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (g : RingHom.{u2, u3} S S' (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3)))), Eq.{max (succ u3) (succ u1)} (ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u3} R S' _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} R S S' (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3))) g f)) (ContinuousMap.comp.{u3, u2, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) (PrimeSpectrum.comap.{u2, u3} S S' _inst_2 _inst_3 g))
+but is expected to have type
+ forall {R : Type.{u2}} {S : Type.{u3}} [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u3} S] {S' : Type.{u1}} [_inst_3 : CommRing.{u1} S'] (f : RingHom.{u2, u3} R S (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2)))) (g : RingHom.{u3, u1} S S' (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3)))), Eq.{max (succ u2) (succ u1)} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.comap.{u2, u1} R S' _inst_1 _inst_3 (RingHom.comp.{u2, u3, u1} R S S' (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3))) g f)) (ContinuousMap.comp.{u1, u3, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (PrimeSpectrum.comap.{u2, u3} R S _inst_1 _inst_2 f) (PrimeSpectrum.comap.{u3, u1} S S' _inst_2 _inst_3 g))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_comp PrimeSpectrum.comap_compₓ'. -/
@[simp]
theorem comap_comp (f : R →+* S) (g : S →+* S') : comap (g.comp f) = (comap f).comp (comap g) :=
rfl
#align prime_spectrum.comap_comp PrimeSpectrum.comap_comp
+/- warning: prime_spectrum.comap_comp_apply -> PrimeSpectrum.comap_comp_apply is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] {S' : Type.{u3}} [_inst_3 : CommRing.{u3} S'] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (g : RingHom.{u2, u3} S S' (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3)))) (x : PrimeSpectrum.{u3} S' _inst_3), Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u3} S' _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u3, u1} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u3} R S' _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} R S S' (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} S' (Ring.toNonAssocRing.{u3} S' (CommRing.toRing.{u3} S' _inst_3))) g f)) x) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) (fun (_x : ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) => (PrimeSpectrum.{u3} S' _inst_3) -> (PrimeSpectrum.{u2} S _inst_2)) (ContinuousMap.hasCoeToFun.{u3, u2} (PrimeSpectrum.{u3} S' _inst_3) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u3} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2)) (PrimeSpectrum.comap.{u2, u3} S S' _inst_2 _inst_3 g) x))
+but is expected to have type
+ forall {R : Type.{u2}} {S : Type.{u3}} [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u3} S] {S' : Type.{u1}} [_inst_3 : CommRing.{u1} S'] (f : RingHom.{u2, u3} R S (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2)))) (g : RingHom.{u3, u1} S S' (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3)))) (x : PrimeSpectrum.{u1} S' _inst_3), Eq.{succ u2} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u2} R _inst_1) x) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u1} S' _inst_3) (fun (_x : PrimeSpectrum.{u1} S' _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u2} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u1, u2} (ContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u2} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1))) (PrimeSpectrum.comap.{u2, u1} R S' _inst_1 _inst_3 (RingHom.comp.{u2, u3, u1} R S S' (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_1))) (Semiring.toNonAssocSemiring.{u3} S (CommSemiring.toSemiring.{u3} S (CommRing.toCommSemiring.{u3} S _inst_2))) (Semiring.toNonAssocSemiring.{u1} S' (CommSemiring.toSemiring.{u1} S' (CommRing.toCommSemiring.{u1} S' _inst_3))) g f)) x) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u3} S _inst_2) (fun (_x : PrimeSpectrum.{u3} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u3} S _inst_2) => PrimeSpectrum.{u2} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u2 u3, u3, u2} (ContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1)) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u3, u2} (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.{u2} R _inst_1) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} R _inst_1))) (PrimeSpectrum.comap.{u2, u3} R S _inst_1 _inst_2 f) (FunLike.coe.{max (succ u3) (succ u1), succ u1, succ u3} (ContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2)) (PrimeSpectrum.{u1} S' _inst_3) (fun (_x : PrimeSpectrum.{u1} S' _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u1} S' _inst_3) => PrimeSpectrum.{u3} S _inst_2) _x) (ContinuousMapClass.toFunLike.{max u3 u1, u1, u3} (ContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2)) (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2) (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u3} (PrimeSpectrum.{u1} S' _inst_3) (PrimeSpectrum.{u3} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} S' _inst_3) (PrimeSpectrum.zariskiTopology.{u3} S _inst_2))) (PrimeSpectrum.comap.{u3, u1} S S' _inst_2 _inst_3 g) x))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_comp_apply PrimeSpectrum.comap_comp_applyₓ'. -/
theorem comap_comp_apply (f : R →+* S) (g : S →+* S') (x : PrimeSpectrum S') :
PrimeSpectrum.comap (g.comp f) x = (PrimeSpectrum.comap f) (PrimeSpectrum.comap g x) :=
rfl
#align prime_spectrum.comap_comp_apply PrimeSpectrum.comap_comp_apply
+/- warning: prime_spectrum.preimage_comap_zero_locus -> PrimeSpectrum.preimage_comap_zeroLocus is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f) s))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (s : Set.{u1} R), Eq.{succ u2} (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.preimage.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 s)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (Set.image.{u1, u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f) s))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.preimage_comap_zero_locus PrimeSpectrum.preimage_comap_zeroLocusₓ'. -/
@[simp]
theorem preimage_comap_zeroLocus (s : Set R) : comap f ⁻¹' zeroLocus s = zeroLocus (f '' s) :=
preimage_comap_zeroLocus_aux f s
#align prime_spectrum.preimage_comap_zero_locus PrimeSpectrum.preimage_comap_zeroLocus
+/- warning: prime_spectrum.comap_injective_of_surjective -> PrimeSpectrum.comap_injective_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjectiveₓ'. -/
theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective f) :
Function.Injective (comap f) := fun x y h =>
PrimeSpectrum.ext _ _
@@ -654,6 +968,12 @@ theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective
(congr_arg PrimeSpectrum.asIdeal h : (comap f x).asIdeal = (comap f y).asIdeal))
#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjective
+/- warning: prime_spectrum.comap_singleton_is_closed_of_surjective -> PrimeSpectrum.comap_singleton_isClosed_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.hasSingleton.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.instSingletonSet.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) x) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjectiveₓ'. -/
theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Surjective f)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
@@ -661,6 +981,12 @@ theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Su
(is_closed_singleton_iff_is_maximal _).2 (Ideal.comap_isMaximal_of_surjective f hf)
#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjective
+/- warning: prime_spectrum.comap_singleton_is_closed_of_is_integral -> PrimeSpectrum.comap_singleton_isClosed_of_isIntegral is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (RingHom.IsIntegral.{u1, u2} R S _inst_1 (CommRing.toRing.{u2} S _inst_2) f) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.hasSingleton.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
+but is expected to have type
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (RingHom.IsIntegral.{u1, u2} R S _inst_1 (CommRing.toRing.{u2} S _inst_2) f) -> (forall (x : PrimeSpectrum.{u2} S _inst_2), (IsClosed.{u2} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (Singleton.singleton.{u2, u2} (PrimeSpectrum.{u2} S _inst_2) (Set.{u2} (PrimeSpectrum.{u2} S _inst_2)) (Set.instSingletonSet.{u2} (PrimeSpectrum.{u2} S _inst_2)) x)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) x) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f) x))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegralₓ'. -/
theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegral)
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
@@ -671,6 +997,12 @@ theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegra
variable (S)
+/- warning: prime_spectrum.localization_comap_inducing -> PrimeSpectrum.localization_comap_inducing is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducingₓ'. -/
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
constructor
@@ -689,6 +1021,12 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
simp
#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducing
+/- warning: prime_spectrum.localization_comap_injective -> PrimeSpectrum.localization_comap_injective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Function.Injective.{succ u2, succ u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injectiveₓ'. -/
theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Function.Injective (comap (algebraMap R S)) :=
by
@@ -700,11 +1038,23 @@ theorem localization_comap_injective [Algebra R S] (M : Submonoid R) [IsLocaliza
exact h
#align prime_spectrum.localization_comap_injective PrimeSpectrum.localization_comap_injective
+/- warning: prime_spectrum.localization_comap_embedding -> PrimeSpectrum.localization_comap_embedding is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Embedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Embedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embeddingₓ'. -/
theorem localization_comap_embedding [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Embedding (comap (algebraMap R S)) :=
⟨localization_comap_inducing S M, localization_comap_injective S M⟩
#align prime_spectrum.localization_comap_embedding PrimeSpectrum.localization_comap_embedding
+/- warning: prime_spectrum.localization_comap_range -> PrimeSpectrum.localization_comap_range is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) _inst_4)))) (setOf.{u1} (PrimeSpectrum.{u1} R _inst_1) (fun (p : PrimeSpectrum.{u1} R _inst_1) => Disjoint.{u1} (Set.{u1} R) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.completeBooleanAlgebra.{u1} R)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} R) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} R) (Set.booleanAlgebra.{u1} R))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) R (Submonoid.setLike.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))) M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 p))))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))] (M : Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) [_inst_5 : IsLocalization.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) M S (CommRing.toCommSemiring.{u2} S _inst_2) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) _inst_4)))) (setOf.{u1} (PrimeSpectrum.{u1} R _inst_1) (fun (p : PrimeSpectrum.{u1} R _inst_1) => Disjoint.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} R) (Preorder.toLE.{u1} (Set.{u1} R) (PartialOrder.toPreorder.{u1} (Set.{u1} R) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} R) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} R) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} R) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} R) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} R) (Set.instCompleteBooleanAlgebraSet.{u1} R)))))) (SetLike.coe.{u1, u1} (Submonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) R (Submonoid.instSetLikeSubmonoid.{u1} R (MulZeroOneClass.toMulOneClass.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) M) (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 p))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_comap_range PrimeSpectrum.localization_comap_rangeₓ'. -/
theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Set.range (comap (algebraMap R S)) = { p | Disjoint (M : Set R) p.asIdeal } :=
by
@@ -726,6 +1076,12 @@ section SpecOfSurjective
open Function RingHom
+/- warning: prime_spectrum.comap_inducing_of_surjective -> PrimeSpectrum.comap_inducing_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Inducing.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjectiveₓ'. -/
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
{
induced :=
@@ -741,6 +1097,12 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
exact ⟨f '' F, hF.symm.trans (preimage_comap_zero_locus f F)⟩ }
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
+/- warning: prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap -> PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (forall (I : Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.image.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (HasLiftT.mk.{succ u2, succ u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (CoeTCₓ.coe.{succ u2, succ u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) (Set.{u2} S) (SetLike.Set.hasCoeT.{u2, u2} (Ideal.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))) S (Submodule.setLike.{u2, u2} S S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2))))))) I))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f I))))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (forall (I : Ideal.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.image.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)) (PrimeSpectrum.zeroLocus.{u2} S _inst_2 (SetLike.coe.{u2, u2} (Ideal.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) S (Submodule.setLike.{u2, u2} S S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (Semiring.toModule.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) I))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (Ideal.comap.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f I))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comapₓ'. -/
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
comap f '' zeroLocus I = zeroLocus (I.comap f) :=
by
@@ -762,6 +1124,12 @@ theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal
rwa [mem_ker, map_sub, sub_eq_zero]
#align prime_spectrum.image_comap_zero_locus_eq_zero_locus_comap PrimeSpectrum.image_comap_zeroLocus_eq_zeroLocus_comap
+/- warning: prime_spectrum.range_comap_of_surjective -> PrimeSpectrum.range_comap_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (HasLiftT.mk.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (CoeTCₓ.coe.{succ u1, succ u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Set.{u1} R) (SetLike.Set.hasCoeT.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_2)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f))))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (SetLike.coe.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) f))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.range_comap_of_surjective PrimeSpectrum.range_comap_of_surjectiveₓ'. -/
theorem range_comap_of_surjective (hf : Surjective f) : Set.range (comap f) = zeroLocus (ker f) :=
by
rw [← Set.image_univ]
@@ -769,12 +1137,24 @@ theorem range_comap_of_surjective (hf : Surjective f) : Set.range (comap f) = ze
rw [zero_locus_bot]
#align prime_spectrum.range_comap_of_surjective PrimeSpectrum.range_comap_of_surjective
+/- warning: prime_spectrum.is_closed_range_comap_of_surjective -> PrimeSpectrum.isClosed_range_comap_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (IsClosed.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_2) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.is_closed_range_comap_of_surjective PrimeSpectrum.isClosed_range_comap_of_surjectiveₓ'. -/
theorem isClosed_range_comap_of_surjective (hf : Surjective f) : IsClosed (Set.range (comap f)) :=
by
rw [range_comap_of_surjective _ f hf]
exact is_closed_zero_locus ↑(ker f)
#align prime_spectrum.is_closed_range_comap_of_surjective PrimeSpectrum.isClosed_range_comap_of_surjective
+/- warning: prime_spectrum.closed_embedding_comap_of_surjective -> PrimeSpectrum.closedEmbedding_comap_of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_2)))) f)) -> (ClosedEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_2) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+but is expected to have type
+ forall {R : Type.{u1}} (S : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} S] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u1 u2, u1, u2} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2)))) R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))) (RingHom.instRingHomClassRingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_2))))))) f)) -> (ClosedEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (fun (_x : PrimeSpectrum.{u2} S _inst_2) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_2) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_2) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_2) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_2 f)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.closed_embedding_comap_of_surjective PrimeSpectrum.closedEmbedding_comap_of_surjectiveₓ'. -/
theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbedding (comap f) :=
{ induced := (comap_inducing_of_surjective S f hf).induced
inj := comap_injective_of_surjective f hf
@@ -787,65 +1167,120 @@ end Comap
section BasicOpen
+#print PrimeSpectrum.basicOpen /-
/-- `basic_open r` is the open subset containing all prime ideals not containing `r`. -/
def basicOpen (r : R) : TopologicalSpace.Opens (PrimeSpectrum R)
where
carrier := { x | r ∉ x.asIdeal }
is_open' := ⟨{r}, Set.ext fun x => Set.singleton_subset_iff.trans <| Classical.not_not.symm⟩
#align prime_spectrum.basic_open PrimeSpectrum.basicOpen
+-/
+#print PrimeSpectrum.mem_basicOpen /-
@[simp]
theorem mem_basicOpen (f : R) (x : PrimeSpectrum R) : x ∈ basicOpen f ↔ f ∉ x.asIdeal :=
Iff.rfl
#align prime_spectrum.mem_basic_open PrimeSpectrum.mem_basicOpen
+-/
+#print PrimeSpectrum.isOpen_basicOpen /-
theorem isOpen_basicOpen {a : R} : IsOpen (basicOpen a : Set (PrimeSpectrum R)) :=
(basicOpen a).IsOpen
#align prime_spectrum.is_open_basic_open PrimeSpectrum.isOpen_basicOpen
+-/
+/- warning: prime_spectrum.basic_open_eq_zero_locus_compl -> PrimeSpectrum.basicOpen_eq_zeroLocus_compl is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (r : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.booleanAlgebra.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) r)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (r : R), Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.coe.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r)) (HasCompl.compl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instBooleanAlgebraSet.{u1} (PrimeSpectrum.{u1} R _inst_1))) (PrimeSpectrum.zeroLocus.{u1} R _inst_1 (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) r)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_complₓ'. -/
@[simp]
theorem basicOpen_eq_zeroLocus_compl (r : R) :
(basicOpen r : Set (PrimeSpectrum R)) = zeroLocus {r}ᶜ :=
Set.ext fun x => by simpa only [Set.mem_compl_iff, mem_zero_locus, Set.singleton_subset_iff]
#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_compl
+/- warning: prime_spectrum.basic_open_one -> PrimeSpectrum.basicOpen_one is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_1))))))))) (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_one PrimeSpectrum.basicOpen_oneₓ'. -/
@[simp]
theorem basicOpen_one : basicOpen (1 : R) = ⊤ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_one PrimeSpectrum.basicOpen_one
+/- warning: prime_spectrum.basic_open_zero -> PrimeSpectrum.basicOpen_zero is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))))))) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_zero PrimeSpectrum.basicOpen_zeroₓ'. -/
@[simp]
theorem basicOpen_zero : basicOpen (0 : R) = ⊥ :=
TopologicalSpace.Opens.ext <| by simp
#align prime_spectrum.basic_open_zero PrimeSpectrum.basicOpen_zero
+/- warning: prime_spectrum.basic_open_le_basic_open_iff -> PrimeSpectrum.basicOpen_le_basicOpen_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Iff (LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)) (Membership.Mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.hasSingleton.{u1} R) g))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Iff (LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)) (Membership.mem.{u1, u1} R (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (SetLike.instMembership.{u1, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f (Ideal.radical.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.span.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (Singleton.singleton.{u1, u1} R (Set.{u1} R) (Set.instSingletonSet.{u1} R) g))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_le_basic_open_iff PrimeSpectrum.basicOpen_le_basicOpen_iffₓ'. -/
theorem basicOpen_le_basicOpen_iff (f g : R) :
basicOpen f ≤ basicOpen g ↔ f ∈ (Ideal.span ({g} : Set R)).radical := by
rw [← SetLike.coe_subset_coe, basic_open_eq_zero_locus_compl, basic_open_eq_zero_locus_compl,
Set.compl_subset_compl, zero_locus_subset_zero_locus_singleton_iff]
#align prime_spectrum.basic_open_le_basic_open_iff PrimeSpectrum.basicOpen_le_basicOpen_iff
+/- warning: prime_spectrum.basic_open_mul -> PrimeSpectrum.basicOpen_mul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (Inf.inf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (Inf.inf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Lattice.toInf.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul PrimeSpectrum.basicOpen_mulₓ'. -/
theorem basicOpen_mul (f g : R) : basicOpen (f * g) = basicOpen f ⊓ basicOpen g :=
TopologicalSpace.Opens.ext <| by simp [zero_locus_singleton_mul]
#align prime_spectrum.basic_open_mul PrimeSpectrum.basicOpen_mul
+/- warning: prime_spectrum.basic_open_mul_le_left -> PrimeSpectrum.basicOpen_mul_le_left is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_leftₓ'. -/
theorem basicOpen_mul_le_left (f g : R) : basicOpen (f * g) ≤ basicOpen f :=
by
rw [basic_open_mul f g]
exact inf_le_left
#align prime_spectrum.basic_open_mul_le_left PrimeSpectrum.basicOpen_mul_le_left
+/- warning: prime_spectrum.basic_open_mul_le_right -> PrimeSpectrum.basicOpen_mul_le_right is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.partialOrder.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (Ring.toDistrib.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (g : R), LE.le.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Preorder.toLE.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) f g)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 g)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_rightₓ'. -/
theorem basicOpen_mul_le_right (f g : R) : basicOpen (f * g) ≤ basicOpen g :=
by
rw [basic_open_mul f g]
exact inf_le_right
#align prime_spectrum.basic_open_mul_le_right PrimeSpectrum.basicOpen_mul_le_right
+/- warning: prime_spectrum.basic_open_pow -> PrimeSpectrum.basicOpen_pow is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1)))) f n)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R) (n : Nat), (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 (HPow.hPow.{u1, 0, u1} R Nat R (instHPow.{u1, 0} R Nat (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))) f n)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_pow PrimeSpectrum.basicOpen_powₓ'. -/
@[simp]
theorem basicOpen_pow (f : R) (n : ℕ) (hn : 0 < n) : basicOpen (f ^ n) = basicOpen f :=
TopologicalSpace.Opens.ext <| by simpa using zero_locus_singleton_pow f n hn
#align prime_spectrum.basic_open_pow PrimeSpectrum.basicOpen_pow
+#print PrimeSpectrum.isTopologicalBasis_basic_opens /-
theorem isTopologicalBasis_basic_opens :
TopologicalSpace.IsTopologicalBasis
(Set.range fun r : R => (basicOpen r : Set (PrimeSpectrum R))) :=
@@ -860,14 +1295,18 @@ theorem isTopologicalBasis_basic_opens :
rw [← Set.compl_subset_compl, ← hs, basic_open_eq_zero_locus_compl, compl_compl]
exact zero_locus_anti_mono (set.singleton_subset_iff.mpr hfs)
#align prime_spectrum.is_topological_basis_basic_opens PrimeSpectrum.isTopologicalBasis_basic_opens
+-/
+#print PrimeSpectrum.isBasis_basic_opens /-
theorem isBasis_basic_opens : TopologicalSpace.Opens.IsBasis (Set.range (@basicOpen R _)) :=
by
unfold TopologicalSpace.Opens.IsBasis
convert is_topological_basis_basic_opens
rw [← Set.range_comp]
#align prime_spectrum.is_basis_basic_opens PrimeSpectrum.isBasis_basic_opens
+-/
+#print PrimeSpectrum.isCompact_basicOpen /-
theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectrum R)) :=
isCompact_of_finite_subfamily_closed fun ι Z hZc hZ =>
by
@@ -892,7 +1331,14 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
rw [Set.singleton_subset_iff]
exact ⟨n, hs⟩
#align prime_spectrum.is_compact_basic_open PrimeSpectrum.isCompact_basicOpen
+-/
+/- warning: prime_spectrum.basic_open_eq_bot_iff -> PrimeSpectrum.basicOpen_eq_bot_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R), Iff (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (IsNilpotent.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))))) (Monoid.Pow.{u1} R (Ring.toMonoid.{u1} R (CommRing.toRing.{u1} R _inst_1))) f)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (f : R), Iff (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 f) (Bot.bot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toBot.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (IsNilpotent.{u1} R (CommMonoidWithZero.toZero.{u1} R (CommSemiring.toCommMonoidWithZero.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) f)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iffₓ'. -/
@[simp]
theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
by
@@ -902,6 +1348,12 @@ theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f :=
exact ⟨fun h I hI => h ⟨I, hI⟩, fun h ⟨I, hI⟩ => h I hI⟩
#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iff
+/- warning: prime_spectrum.localization_away_comap_range -> PrimeSpectrum.localization_away_comap_range is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3)) _inst_4)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))))) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], Eq.{succ u1} (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.range.{u1, succ u2} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.{u2} S _inst_3) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (fun (_x : PrimeSpectrum.{u2} S _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_3) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3)) _inst_4)))) (SetLike.coe.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.basicOpen.{u1} R _inst_1 r))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_rangeₓ'. -/
theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : Set.range (comap (algebraMap R S)) = basicOpen r :=
by
@@ -916,6 +1368,12 @@ theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r
exact h₁ (x.2.mem_of_pow_mem _ h₃)
#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_range
+/- warning: prime_spectrum.localization_away_open_embedding -> PrimeSpectrum.localization_away_openEmbedding is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], OpenEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_3) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_3)) _inst_4)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (S : Type.{u2}) [_inst_3 : CommRing.{u2} S] [_inst_4 : Algebra.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3))] (r : R) [_inst_5 : IsLocalization.Away.{u1, u2} R (CommRing.toCommSemiring.{u1} R _inst_1) r S (CommRing.toCommSemiring.{u2} S _inst_3) _inst_4], OpenEmbedding.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (fun (_x : PrimeSpectrum.{u2} S _inst_3) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_3) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_3) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_3) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_3 (algebraMap.{u1, u2} R S (CommRing.toCommSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_3)) _inst_4)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbeddingₓ'. -/
theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
@@ -945,26 +1403,56 @@ We endow `prime_spectrum R` with a partial order, where `x ≤ y` if and only if
instance : PartialOrder (PrimeSpectrum R) :=
PartialOrder.lift asIdeal ext
+/- warning: prime_spectrum.as_ideal_le_as_ideal -> PrimeSpectrum.asIdeal_le_asIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.as_ideal_le_as_ideal PrimeSpectrum.asIdeal_le_asIdealₓ'. -/
@[simp]
theorem asIdeal_le_asIdeal (x y : PrimeSpectrum R) : x.asIdeal ≤ y.asIdeal ↔ x ≤ y :=
Iff.rfl
#align prime_spectrum.as_ideal_le_as_ideal PrimeSpectrum.asIdeal_le_asIdeal
+/- warning: prime_spectrum.as_ideal_lt_as_ideal -> PrimeSpectrum.asIdeal_lt_asIdeal is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LT.lt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (Preorder.toHasLt.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) (SetLike.partialOrder.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LT.lt.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLt.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LT.lt.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Preorder.toLT.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))))))) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y)) (LT.lt.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLT.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.as_ideal_lt_as_ideal PrimeSpectrum.asIdeal_lt_asIdealₓ'. -/
@[simp]
theorem asIdeal_lt_asIdeal (x y : PrimeSpectrum R) : x.asIdeal < y.asIdeal ↔ x < y :=
Iff.rfl
#align prime_spectrum.as_ideal_lt_as_ideal PrimeSpectrum.asIdeal_lt_asIdeal
+/- warning: prime_spectrum.le_iff_mem_closure -> PrimeSpectrum.le_iff_mem_closure is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y) (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasMem.{u1} (PrimeSpectrum.{u1} R _inst_1)) y (closure.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.hasSingleton.{u1} (PrimeSpectrum.{u1} R _inst_1)) x)))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y) (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instMembershipSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) y (closure.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (Singleton.singleton.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Set.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Set.instSingletonSet.{u1} (PrimeSpectrum.{u1} R _inst_1)) x)))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_iff_mem_closure PrimeSpectrum.le_iff_mem_closureₓ'. -/
theorem le_iff_mem_closure (x y : PrimeSpectrum R) :
x ≤ y ↔ y ∈ closure ({x} : Set (PrimeSpectrum R)) := by
rw [← as_ideal_le_as_ideal, ← zero_locus_vanishing_ideal_eq_closure, mem_zero_locus,
vanishing_ideal_singleton, SetLike.coe_subset_coe]
#align prime_spectrum.le_iff_mem_closure PrimeSpectrum.le_iff_mem_closure
+/- warning: prime_spectrum.le_iff_specializes -> PrimeSpectrum.le_iff_specializes is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) x y) (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (x : PrimeSpectrum.{u1} R _inst_1) (y : PrimeSpectrum.{u1} R _inst_1), Iff (LE.le.{u1} (PrimeSpectrum.{u1} R _inst_1) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) x y) (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y)
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.le_iff_specializes PrimeSpectrum.le_iff_specializesₓ'. -/
theorem le_iff_specializes (x y : PrimeSpectrum R) : x ≤ y ↔ x ⤳ y :=
(le_iff_mem_closure x y).trans specializes_iff_mem_closure.symm
#align prime_spectrum.le_iff_specializes PrimeSpectrum.le_iff_specializes
+/- warning: prime_spectrum.nhds_order_embedding -> PrimeSpectrum.nhdsOrderEmbedding is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Preorder.toHasLe.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.partialOrder.{u1} R _inst_1))) (Preorder.toHasLe.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Filter.partialOrder.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R], OrderEmbedding.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Preorder.toLE.{u1} (PrimeSpectrum.{u1} R _inst_1) (PartialOrder.toPreorder.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.instPartialOrderPrimeSpectrum.{u1} R _inst_1))) (Preorder.toLE.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (PrimeSpectrum.{u1} R _inst_1)) (Filter.instPartialOrderFilter.{u1} (PrimeSpectrum.{u1} R _inst_1))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.nhds_order_embedding PrimeSpectrum.nhdsOrderEmbeddingₓ'. -/
/-- `nhds` as an order embedding. -/
@[simps (config := { fullyApplied := true })]
def nhdsOrderEmbedding : PrimeSpectrum R ↪o Filter (PrimeSpectrum R) :=
@@ -986,6 +1474,12 @@ instance {R : Type _} [Field R] : Unique (PrimeSpectrum R)
end Order
+/- warning: prime_spectrum.localization_map_of_specializes -> PrimeSpectrum.localizationMapOfSpecializes is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {x : PrimeSpectrum.{u1} R _inst_1} {y : PrimeSpectrum.{u1} R _inst_1}, (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y) -> (RingHom.{u1, u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (NonAssocRing.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Ring.toNonAssocRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (CommRing.toRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)) (Localization.commRing.{u1} R _inst_1 (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.isPrime.{u1} R _inst_1 y)))))) (NonAssocRing.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (Ring.toNonAssocRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (CommRing.toRing.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)) (Localization.commRing.{u1} R _inst_1 (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.isPrime.{u1} R _inst_1 x)))))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {x : PrimeSpectrum.{u1} R _inst_1} {y : PrimeSpectrum.{u1} R _inst_1}, (Specializes.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) x y) -> (RingHom.{u1, u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (Semiring.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (CommSemiring.toSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y)) (Localization.instCommSemiringLocalizationToCommMonoid.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 y) (PrimeSpectrum.IsPrime.{u1} R _inst_1 y))))) (Semiring.toNonAssocSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (CommSemiring.toSemiring.{u1} (Localization.AtPrime.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x)) (Localization.instCommSemiringLocalizationToCommMonoid.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (Ideal.primeCompl.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (PrimeSpectrum.asIdeal.{u1} R _inst_1 x) (PrimeSpectrum.IsPrime.{u1} R _inst_1 x))))))
+Case conversion may be inaccurate. Consider using '#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializesₓ'. -/
/-- If `x` specializes to `y`, then there is a natural map from the localization of `y` to the
localization of `x`. -/
def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
@@ -1005,13 +1499,21 @@ namespace LocalRing
variable [LocalRing R]
+#print LocalRing.closedPoint /-
/-- The closed point in the prime spectrum of a local ring. -/
def closedPoint : PrimeSpectrum R :=
⟨maximalIdeal R, (maximalIdeal.isMaximal R).IsPrime⟩
#align local_ring.closed_point LocalRing.closedPoint
+-/
variable {R}
+/- warning: local_ring.is_local_ring_hom_iff_comap_closed_point -> LocalRing.isLocalRingHom_iff_comap_closedPoint is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_4)))), Iff (IsLocalRingHom.{u1, u2} R S (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4)) f) (Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_4) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)))), Iff (IsLocalRingHom.{u1, u2} R S (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)) f) (Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (fun (_x : PrimeSpectrum.{u2} S _inst_4) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3))
+Case conversion may be inaccurate. Consider using '#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPointₓ'. -/
theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) :
IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
by
@@ -1019,16 +1521,30 @@ theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRin
rfl
#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPoint
+/- warning: local_ring.comap_closed_point -> LocalRing.comap_closedPoint is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_4)))) [_inst_6 : IsLocalRingHom.{u1, u2} R S (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_4)) f], Eq.{succ u1} (PrimeSpectrum.{u1} R _inst_1) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (fun (_x : ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) => (PrimeSpectrum.{u2} S _inst_4) -> (PrimeSpectrum.{u1} R _inst_1)) (ContinuousMap.hasCoeToFun.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] {S : Type.{u2}} [_inst_4 : CommRing.{u2} S] [_inst_5 : LocalRing.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4))] (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)))) [_inst_6 : IsLocalRingHom.{u1, u2} R S (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_4)) f], Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (fun (_x : PrimeSpectrum.{u2} S _inst_4) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : PrimeSpectrum.{u2} S _inst_4) => PrimeSpectrum.{u1} R _inst_1) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u2, u1} (ContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1) (ContinuousMap.instContinuousMapClassContinuousMap.{u2, u1} (PrimeSpectrum.{u2} S _inst_4) (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u2} S _inst_4) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (PrimeSpectrum.comap.{u1, u2} R S _inst_1 _inst_4 f) (LocalRing.closedPoint.{u2} S _inst_4 _inst_5)) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3)
+Case conversion may be inaccurate. Consider using '#align local_ring.comap_closed_point LocalRing.comap_closedPointₓ'. -/
@[simp]
theorem comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) [IsLocalRingHom f] :
PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
(isLocalRingHom_iff_comap_closedPoint f).mp inferInstance
#align local_ring.comap_closed_point LocalRing.comap_closedPoint
+#print LocalRing.specializes_closedPoint /-
theorem specializes_closedPoint (x : PrimeSpectrum R) : x ⤳ closedPoint R :=
(PrimeSpectrum.le_iff_specializes _ _).mp (LocalRing.le_maximalIdeal x.2.1)
#align local_ring.specializes_closed_point LocalRing.specializes_closedPoint
+-/
+/- warning: local_ring.closed_point_mem_iff -> LocalRing.closedPoint_mem_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_1))] (U : TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)), Iff (Membership.Mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.setLike.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3) U) (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) U (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toHasTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.completeLattice.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] [_inst_3 : LocalRing.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))] (U : TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)), Iff (Membership.mem.{u1, u1} (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (SetLike.instMembership.{u1, u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (PrimeSpectrum.{u1} R _inst_1) (TopologicalSpace.Opens.instSetLikeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1))) (LocalRing.closedPoint.{u1} R _inst_1 _inst_3) U) (Eq.{succ u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) U (Top.top.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (CompleteLattice.toTop.{u1} (TopologicalSpace.Opens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)) (TopologicalSpace.Opens.instCompleteLatticeOpens.{u1} (PrimeSpectrum.{u1} R _inst_1) (PrimeSpectrum.zariskiTopology.{u1} R _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align local_ring.closed_point_mem_iff LocalRing.closedPoint_mem_iffₓ'. -/
theorem closedPoint_mem_iff (U : TopologicalSpace.Opens <| PrimeSpectrum R) :
closedPoint R ∈ U ↔ U = ⊤ := by
constructor
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module algebraic_geometry.prime_spectrum.basic
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit a7c017d750512a352b623b1824d75da5998457d0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,7 +12,7 @@ import Mathbin.Algebra.PunitInstances
import Mathbin.LinearAlgebra.Finsupp
import Mathbin.RingTheory.Ideal.Over
import Mathbin.RingTheory.Ideal.Prod
-import Mathbin.RingTheory.Localization.Away
+import Mathbin.RingTheory.Localization.Away.Basic
import Mathbin.RingTheory.Nilpotent
import Mathbin.Topology.Sets.Closeds
import Mathbin.Topology.Sober
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -169,9 +169,9 @@ theorem coe_vanishingIdeal (t : Set (PrimeSpectrum R)) :
(vanishingIdeal t : Set R) = { f : R | ∀ x : PrimeSpectrum R, x ∈ t → f ∈ x.asIdeal } :=
by
ext f
- rw [vanishing_ideal, SetLike.mem_coe, Submodule.mem_infᵢ]
+ rw [vanishing_ideal, SetLike.mem_coe, Submodule.mem_iInf]
apply forall_congr'; intro x
- rw [Submodule.mem_infᵢ]
+ rw [Submodule.mem_iInf]
#align prime_spectrum.coe_vanishing_ideal PrimeSpectrum.coe_vanishingIdeal
theorem mem_vanishingIdeal (t : Set (PrimeSpectrum R)) (f : R) :
@@ -230,7 +230,7 @@ theorem vanishingIdeal_zeroLocus_eq_radical (I : Ideal R) :
vanishingIdeal (zeroLocus (I : Set R)) = I.radical :=
Ideal.ext fun f =>
by
- rw [mem_vanishing_ideal, Ideal.radical_eq_infₛ, Submodule.mem_infₛ]
+ rw [mem_vanishing_ideal, Ideal.radical_eq_sInf, Submodule.mem_sInf]
exact ⟨fun h x hx => h ⟨x, hx.2⟩ hx.1, fun h x hx => h x.1 ⟨hx, x.2⟩⟩
#align prime_spectrum.vanishing_ideal_zero_locus_eq_radical PrimeSpectrum.vanishingIdeal_zeroLocus_eq_radical
@@ -345,24 +345,24 @@ theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
(gc R).u_inf
#align prime_spectrum.vanishing_ideal_union PrimeSpectrum.vanishingIdeal_union
-theorem zeroLocus_supᵢ {ι : Sort _} (I : ι → Ideal R) :
+theorem zeroLocus_iSup {ι : Sort _} (I : ι → Ideal R) :
zeroLocus ((⨆ i, I i : Ideal R) : Set R) = ⋂ i, zeroLocus (I i) :=
- (gc R).l_supᵢ
-#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_supᵢ
+ (gc R).l_iSup
+#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSup
-theorem zeroLocus_unionᵢ {ι : Sort _} (s : ι → Set R) :
+theorem zeroLocus_iUnion {ι : Sort _} (s : ι → Set R) :
zeroLocus (⋃ i, s i) = ⋂ i, zeroLocus (s i) :=
- (gc_set R).l_supᵢ
-#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_unionᵢ
+ (gc_set R).l_iSup
+#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnion
theorem zeroLocus_bUnion (s : Set (Set R)) :
zeroLocus (⋃ s' ∈ s, s' : Set R) = ⋂ s' ∈ s, zeroLocus s' := by simp only [zero_locus_Union]
#align prime_spectrum.zero_locus_bUnion PrimeSpectrum.zeroLocus_bUnion
-theorem vanishingIdeal_unionᵢ {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
+theorem vanishingIdeal_iUnion {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
vanishingIdeal (⋃ i, t i) = ⨅ i, vanishingIdeal (t i) :=
- (gc R).u_infᵢ
-#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_unionᵢ
+ (gc R).u_iInf
+#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnion
theorem zeroLocus_inf (I J : Ideal R) :
zeroLocus ((I ⊓ J : Ideal R) : Set R) = zeroLocus I ∪ zeroLocus J :=
@@ -419,7 +419,7 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
TopologicalSpace.ofClosed (Set.range PrimeSpectrum.zeroLocus) ⟨Set.univ, by simp⟩
(by
intro Zs h
- rw [Set.interₛ_eq_interᵢ]
+ rw [Set.sInter_eq_iInter]
choose f hf using fun i : Zs => h i.Prop
simp only [← hf]
exact ⟨_, zero_locus_Union _⟩)
@@ -881,7 +881,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
rw [← vanishing_ideal_zero_locus_eq_radical]
apply vanishing_ideal_anti_mono hZ
exact subset_vanishing_ideal_zero_locus {f} (Set.mem_singleton f)
- rcases Submodule.exists_finset_of_mem_supᵢ I hn with ⟨s, hs⟩
+ rcases Submodule.exists_finset_of_mem_iSup I hn with ⟨s, hs⟩
use s
-- Using simp_rw here, because `hI` and `zero_locus_supr` need to be applied underneath binders
simp_rw [basic_open_eq_zero_locus_compl f, Set.inter_comm (zero_locus {f}ᶜ), ← Set.diff_eq,
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -508,7 +508,7 @@ theorem vanishingIdeal_anti_mono_iff {s t : Set (PrimeSpectrum R)} (ht : IsClose
⟨vanishingIdeal_anti_mono, fun h =>
by
rw [← ht.closure_subset_iff, ← ht.closure_eq]
- convert ← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
+ convert← zero_locus_anti_mono_ideal h <;> apply zero_locus_vanishing_ideal_eq_closure⟩
#align prime_spectrum.vanishing_ideal_anti_mono_iff PrimeSpectrum.vanishingIdeal_anti_mono_iff
theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs : IsClosed s)
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -520,7 +520,7 @@ theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs :
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
def closedsEmbedding (R : Type _) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
- OrderEmbedding.ofMapLeIff (fun s => vanishingIdeal s.ofDual) fun s t =>
+ OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal s.ofDual) fun s t =>
(vanishingIdeal_anti_mono_iff s.2).symm
#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbedding
@@ -968,7 +968,7 @@ theorem le_iff_specializes (x y : PrimeSpectrum R) : x ≤ y ↔ x ⤳ y :=
/-- `nhds` as an order embedding. -/
@[simps (config := { fullyApplied := true })]
def nhdsOrderEmbedding : PrimeSpectrum R ↪o Filter (PrimeSpectrum R) :=
- OrderEmbedding.ofMapLeIff nhds fun a b => (le_iff_specializes a b).symm
+ OrderEmbedding.ofMapLEIff nhds fun a b => (le_iff_specializes a b).symm
#align prime_spectrum.nhds_order_embedding PrimeSpectrum.nhdsOrderEmbedding
instance : T0Space (PrimeSpectrum R) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Mathlib.RingTheory.Nilpotent
has a few very simple definitions (Mathlib.Data.Nat.Lattice
is sufficient to state them), but needs some pretty heavy imports (ideals, linear algebra) towards the end. This change moves the heavier parts into a new file.
@@ -8,7 +8,7 @@ import Mathlib.RingTheory.Ideal.Over
import Mathlib.RingTheory.Ideal.Prod
import Mathlib.RingTheory.Ideal.MinimalPrime
import Mathlib.RingTheory.Localization.Away.Basic
-import Mathlib.RingTheory.Nilpotent
+import Mathlib.RingTheory.Nilpotent.Lemmas
import Mathlib.Topology.Sets.Closeds
import Mathlib.Topology.Sober
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -398,8 +398,9 @@ theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
rw [Set.mem_compl_iff, mem_zeroLocus, Set.singleton_subset_iff]; rfl
#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem
-/-- The Zariski topology on the prime spectrum of a commutative (semi)ring is defined via the closed
-sets of the topology: they are exactly those sets that are the zero locus of a subset of the ring.-/
+/-- The Zariski topology on the prime spectrum of a commutative (semi)ring is defined
+via the closed sets of the topology: they are exactly those sets that are the zero locus
+of a subset of the ring. -/
instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
TopologicalSpace.ofClosed (Set.range PrimeSpectrum.zeroLocus) ⟨Set.univ, by simp⟩
(by
@@ -516,7 +516,7 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
IsIrreducible (zeroLocus (I : Set R)) ↔ I.IsPrime := by
rw [Ideal.isPrime_iff, IsIrreducible]
apply and_congr
- · rw [Set.nonempty_iff_ne_empty, Ne.def, zeroLocus_empty_iff_eq_top]
+ · rw [Set.nonempty_iff_ne_empty, Ne, zeroLocus_empty_iff_eq_top]
· trans ∀ x y : Ideal R, Z(I) ⊆ Z(x) ∪ Z(y) → Z(I) ⊆ Z(x) ∨ Z(I) ⊆ Z(y)
· simp_rw [isPreirreducible_iff_closed_union_closed, isClosed_iff_zeroLocus_ideal]
constructor
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -760,7 +760,7 @@ theorem isClosed_range_comap_of_surjective (hf : Surjective f) :
theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbedding (comap f) :=
{ induced := (comap_inducing_of_surjective S f hf).induced
inj := comap_injective_of_surjective f hf
- closed_range := isClosed_range_comap_of_surjective S f hf }
+ isClosed_range := isClosed_range_comap_of_surjective S f hf }
#align prime_spectrum.closed_embedding_comap_of_surjective PrimeSpectrum.closedEmbedding_comap_of_surjective
end SpecOfSurjective
@@ -874,7 +874,7 @@ theorem localization_away_comap_range (S : Type v) [CommSemiring S] [Algebra R S
theorem localization_away_openEmbedding (S : Type v) [CommSemiring S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
- open_range := by
+ isOpen_range := by
rw [localization_away_comap_range S r]
exact isOpen_basicOpen }
#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbedding
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -71,7 +71,6 @@ namespace PrimeSpectrum
section CommSemiRing
variable [CommSemiring R] [CommSemiring S]
-
variable {R S}
instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
Show that localization at minimal primes results in rings with only a single prime ideal, implying that every non-unit element is nilpotent.
Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: uniwuni <95649083+uniwuni@users.noreply.github.com>
@@ -963,6 +963,22 @@ protected def pointsEquivIrreducibleCloseds :
map_rel_iff' {p q} :=
(RelIso.symm irreducibleSetEquivPoints).map_rel_iff.trans (le_iff_specializes p q).symm
+section LocalizationAtMinimal
+
+variable {I : Ideal R} [hI : I.IsPrime]
+
+/--
+Localizations at minimal primes have single-point prime spectra.
+-/
+def primeSpectrum_unique_of_localization_at_minimal (h : I ∈ minimalPrimes R) :
+ Unique (PrimeSpectrum (Localization.AtPrime I)) where
+ default :=
+ ⟨LocalRing.maximalIdeal (Localization I.primeCompl),
+ (LocalRing.maximalIdeal.isMaximal _).isPrime⟩
+ uniq x := PrimeSpectrum.ext _ _ (Localization.AtPrime.prime_unique_of_minimal h x.asIdeal)
+
+end LocalizationAtMinimal
+
end CommSemiRing
end PrimeSpectrum
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -47,7 +47,7 @@ and Chris Hughes (on an earlier repository).
noncomputable section
-open Classical
+open scoped Classical
universe u v
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -682,6 +682,7 @@ open Function RingHom
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) where
induced := by
+ set_option tactic.skipAssignedInstances false in
simp_rw [TopologicalSpace.ext_iff, ← isClosed_compl_iff,
← @isClosed_compl_iff (PrimeSpectrum S)
((TopologicalSpace.induced (comap f) zariskiTopology)), isClosed_induced_iff,
@@ -374,9 +374,9 @@ theorem zeroLocus_singleton_mul (f g : R) :
#align prime_spectrum.zero_locus_singleton_mul PrimeSpectrum.zeroLocus_singleton_mul
@[simp]
-theorem zeroLocus_pow (I : Ideal R) {n : ℕ} (hn : 0 < n) :
+theorem zeroLocus_pow (I : Ideal R) {n : ℕ} (hn : n ≠ 0) :
zeroLocus ((I ^ n : Ideal R) : Set R) = zeroLocus I :=
- zeroLocus_radical (I ^ n) ▸ (I.radical_pow n hn).symm ▸ zeroLocus_radical I
+ zeroLocus_radical (I ^ n) ▸ (I.radical_pow hn).symm ▸ zeroLocus_radical I
#align prime_spectrum.zero_locus_pow PrimeSpectrum.zeroLocus_pow
@[simp]
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -1032,7 +1032,7 @@ variable {R}
theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommSemiring S] [LocalRing S]
(f : R →+* S) : IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
- -- Porting note : inline `this` does **not** work
+ -- Porting note: inline `this` does **not** work
have := (local_hom_TFAE f).out 0 4
rw [this, PrimeSpectrum.ext_iff]
rfl
Use it to golf PrimeSpectrum.localization_comap_inducing
.
@@ -639,21 +639,14 @@ variable (S)
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
+ refine ⟨TopologicalSpace.ext_isClosed fun Z ↦ ?_⟩
+ simp_rw [isClosed_induced_iff, isClosed_iff_zeroLocus, @eq_comm _ _ (zeroLocus _),
+ exists_exists_eq_and, preimage_comap_zeroLocus]
constructor
- rw [TopologicalSpace.ext_iff]
- intro U
- rw [← isClosed_compl_iff, ← @isClosed_compl_iff (X := PrimeSpectrum S) (s := U)]
- generalize Uᶜ = Z
- simp_rw [isClosed_induced_iff, isClosed_iff_zeroLocus]
- constructor
· rintro ⟨s, rfl⟩
- refine ⟨_, ⟨algebraMap R S ⁻¹' Ideal.span s, rfl⟩, ?_⟩
- rw [preimage_comap_zeroLocus, ← zeroLocus_span, ← zeroLocus_span s]
- congr 2
- exact congr_arg (zeroLocus ·) <| Submodule.carrier_inj.mpr
- (IsLocalization.map_comap M S (Ideal.span s))
- · rintro ⟨_, ⟨t, rfl⟩, rfl⟩
- rw [preimage_comap_zeroLocus]
+ refine ⟨(Ideal.span s).comap (algebraMap R S), ?_⟩
+ rw [← zeroLocus_span, ← zeroLocus_span s, ← Ideal.map, IsLocalization.map_comap M S]
+ · rintro ⟨s, rfl⟩
exact ⟨_, rfl⟩
#align prime_spectrum.localization_comap_inducing PrimeSpectrum.localization_comap_inducing
@@ -642,7 +642,7 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
constructor
rw [TopologicalSpace.ext_iff]
intro U
- rw [← isClosed_compl_iff, ← @isClosed_compl_iff (α := PrimeSpectrum S) (s := U)]
+ rw [← isClosed_compl_iff, ← @isClosed_compl_iff (X := PrimeSpectrum S) (s := U)]
generalize Uᶜ = Z
simp_rw [isClosed_induced_iff, isClosed_iff_zeroLocus]
constructor
@@ -973,8 +973,8 @@ end CommSemiRing
end PrimeSpectrum
-section CommRing
-variable [CommRing R]
+section CommSemiring
+variable [CommSemiring R]
open PrimeSpectrum in
/--
@@ -1024,7 +1024,7 @@ lemma zeroLocus_ideal_mem_irreducibleComponents {I : Ideal R} :
end PrimeSpectrum
-end CommRing
+end CommSemiring
namespace LocalRing
@@ -549,13 +549,13 @@ theorem isIrreducible_iff_vanishingIdeal_isPrime {s : Set (PrimeSpectrum R)} :
isIrreducible_zeroLocus_iff_of_radical _ (isRadical_vanishingIdeal s)]
#align prime_spectrum.is_irreducible_iff_vanishing_ideal_is_prime PrimeSpectrum.isIrreducible_iff_vanishingIdeal_isPrime
-lemma vanishingIdeal_isIrreducible {R} [CommRing R] :
+lemma vanishingIdeal_isIrreducible :
vanishingIdeal (R := R) '' {s | IsIrreducible s} = {P | P.IsPrime} :=
Set.ext fun I ↦ ⟨fun ⟨_, hs, e⟩ ↦ e ▸ isIrreducible_iff_vanishingIdeal_isPrime.mp hs,
fun h ↦ ⟨zeroLocus I, (isIrreducible_zeroLocus_iff_of_radical _ h.isRadical).mpr h,
(vanishingIdeal_zeroLocus_eq_radical I).trans h.radical⟩⟩
-lemma vanishingIdeal_isClosed_isIrreducible {R} [CommRing R] :
+lemma vanishingIdeal_isClosed_isIrreducible :
vanishingIdeal (R := R) '' {s | IsClosed s ∧ IsIrreducible s} = {P | P.IsPrime} := by
refine (subset_antisymm ?_ ?_).trans vanishingIdeal_isIrreducible
· exact Set.image_subset _ fun _ ↦ And.right
@@ -15,9 +15,9 @@ import Mathlib.Topology.Sober
#align_import algebraic_geometry.prime_spectrum.basic from "leanprover-community/mathlib"@"a7c017d750512a352b623b1824d75da5998457d0"
/-!
-# Prime spectrum of a commutative ring
+# Prime spectrum of a commutative (semi)ring
-The prime spectrum of a commutative ring is the type of all prime ideals.
+The prime spectrum of a commutative (semi)ring is the type of all prime ideals.
It is naturally endowed with a topology: the Zariski topology.
(It is also naturally endowed with a sheaf of rings,
@@ -25,7 +25,7 @@ which is constructed in `AlgebraicGeometry.StructureSheaf`.)
## Main definitions
-* `PrimeSpectrum R`: The prime spectrum of a commutative ring `R`,
+* `PrimeSpectrum R`: The prime spectrum of a commutative (semi)ring `R`,
i.e., the set of all prime ideals of `R`.
* `zeroLocus s`: The zero locus of a subset `s` of `R`
is the subset of `PrimeSpectrum R` consisting of all prime ideals that contain `s`.
@@ -34,7 +34,7 @@ which is constructed in `AlgebraicGeometry.StructureSheaf`.)
## Conventions
-We denote subsets of rings with `s`, `s'`, etc...
+We denote subsets of (semi)rings with `s`, `s'`, etc...
whereas we denote subsets of prime spectra with `t`, `t'`, etc...
## Inspiration/contributors
@@ -51,15 +51,15 @@ open Classical
universe u v
-variable (R : Type u) (S : Type v) [CommRing R] [CommRing S]
+variable (R : Type u) (S : Type v)
-/-- The prime spectrum of a commutative ring `R` is the type of all prime ideals of `R`.
+/-- The prime spectrum of a commutative (semi)ring `R` is the type of all prime ideals of `R`.
It is naturally endowed with a topology (the Zariski topology),
and a sheaf of commutative rings (see `AlgebraicGeometry.StructureSheaf`).
It is a fundamental building block in algebraic geometry. -/
@[ext]
-structure PrimeSpectrum where
+structure PrimeSpectrum [CommSemiring R] where
asIdeal : Ideal R
IsPrime : asIdeal.IsPrime
#align prime_spectrum PrimeSpectrum
@@ -68,6 +68,10 @@ attribute [instance] PrimeSpectrum.IsPrime
namespace PrimeSpectrum
+section CommSemiRing
+
+variable [CommSemiring R] [CommSemiring S]
+
variable {R S}
instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
@@ -123,8 +127,8 @@ theorem primeSpectrumProd_symm_inr_asIdeal (x : PrimeSpectrum S) :
rfl
#align prime_spectrum.prime_spectrum_prod_symm_inr_as_ideal PrimeSpectrum.primeSpectrumProd_symm_inr_asIdeal
-/-- The zero locus of a set `s` of elements of a commutative ring `R` is the set of all prime ideals
-of the ring that contain the set `s`.
+/-- The zero locus of a set `s` of elements of a commutative (semi)ring `R` is the set of all
+prime ideals of the ring that contain the set `s`.
An element `f` of `R` can be thought of as a dependent function on the prime spectrum of `R`.
At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in the quotient ring
@@ -395,8 +399,8 @@ theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
rw [Set.mem_compl_iff, mem_zeroLocus, Set.singleton_subset_iff]; rfl
#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem
-/-- The Zariski topology on the prime spectrum of a commutative ring is defined via the closed sets
-of the topology: they are exactly those sets that are the zero locus of a subset of the ring. -/
+/-- The Zariski topology on the prime spectrum of a commutative (semi)ring is defined via the closed
+sets of the topology: they are exactly those sets that are the zero locus of a subset of the ring.-/
instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
TopologicalSpace.ofClosed (Set.range PrimeSpectrum.zeroLocus) ⟨Set.univ, by simp⟩
(by
@@ -484,7 +488,7 @@ theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs :
#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
-def closedsEmbedding (R : Type*) [CommRing R] :
+def closedsEmbedding (R : Type*) [CommSemiring R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal ↑(OrderDual.ofDual s)) fun s _ =>
(vanishingIdeal_anti_mono_iff s.2).symm
@@ -502,7 +506,7 @@ theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField
(by aesop))
· refine' ⟨fun x => (isClosed_singleton_iff_isMaximal x).2 _⟩
by_cases hx : x.asIdeal = ⊥
- · letI := h.toField
+ · letI := h.toSemifield
exact hx.symm ▸ Ideal.bot_isMaximal
· exact absurd h (Ring.not_isField_iff_exists_prime.2 ⟨x.asIdeal, ⟨hx, x.2⟩⟩)
#align prime_spectrum.t1_space_iff_is_field PrimeSpectrum.t1Space_iff_isField
@@ -567,7 +571,7 @@ instance quasiSober : QuasiSober (PrimeSpectrum R) :=
⟨⟨_, isIrreducible_iff_vanishingIdeal_isPrime.1 h₁⟩, by
rw [IsGenericPoint, closure_singleton, zeroLocus_vanishingIdeal_eq_closure, h₂.closure_eq]⟩⟩
-/-- The prime spectrum of a commutative ring is a compact topological space. -/
+/-- The prime spectrum of a commutative (semi)ring is a compact topological space. -/
instance compactSpace : CompactSpace (PrimeSpectrum R) := by
refine compactSpace_of_finite_subfamily_closed fun S S_closed S_empty ↦ ?_
choose I hI using fun i ↦ (isClosed_iff_zeroLocus_ideal (S i)).mp (S_closed i)
@@ -576,7 +580,7 @@ instance compactSpace : CompactSpace (PrimeSpectrum R) := by
section Comap
-variable {S' : Type*} [CommRing S']
+variable {S' : Type*} [CommSemiring S']
theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
(fun y => ⟨Ideal.comap f y.asIdeal, inferInstance⟩ : PrimeSpectrum S → PrimeSpectrum R) ⁻¹'
@@ -586,7 +590,7 @@ theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
simp only [mem_zeroLocus, Set.image_subset_iff, Set.mem_preimage, mem_zeroLocus, Ideal.coe_comap]
#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_aux
-/-- The function between prime spectra of commutative rings induced by a ring homomorphism.
+/-- The function between prime spectra of commutative (semi)rings induced by a ring homomorphism.
This function is continuous. -/
def comap (f : R →+* S) : C(PrimeSpectrum S, PrimeSpectrum R) where
toFun y := ⟨Ideal.comap f y.asIdeal, inferInstance⟩
@@ -631,21 +635,6 @@ theorem comap_injective_of_surjective (f : R →+* S) (hf : Function.Surjective
(congr_arg PrimeSpectrum.asIdeal h : (comap f x).asIdeal = (comap f y).asIdeal))
#align prime_spectrum.comap_injective_of_surjective PrimeSpectrum.comap_injective_of_surjective
-theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Surjective f)
- (x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
- IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
- haveI : x.asIdeal.IsMaximal := (isClosed_singleton_iff_isMaximal x).1 hx
- (isClosed_singleton_iff_isMaximal _).2 (Ideal.comap_isMaximal_of_surjective f hf)
-#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjective
-
-theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegral)
- (x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
- IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
- (isClosed_singleton_iff_isMaximal _).2
- (Ideal.isMaximal_comap_of_isIntegral_of_isMaximal' f hf x.asIdeal <|
- (isClosed_singleton_iff_isMaximal x).1 hx)
-#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegral
-
variable (S)
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
@@ -696,11 +685,6 @@ theorem localization_comap_range [Algebra R S] (M : Submonoid R) [IsLocalization
exact IsLocalization.comap_map_of_isPrime_disjoint M S _ x.2 h
#align prime_spectrum.localization_comap_range PrimeSpectrum.localization_comap_range
-section SpecOfSurjective
-
-/-! The comap of a surjective ring homomorphism is a closed embedding between the prime spectra. -/
-
-
open Function RingHom
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) where
@@ -718,6 +702,36 @@ theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) wh
exact ⟨f '' F, hF.symm.trans (preimage_comap_zeroLocus f F)⟩
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
+
+end Comap
+end CommSemiRing
+
+section SpecOfSurjective
+
+/-! The comap of a surjective ring homomorphism is a closed embedding between the prime spectra. -/
+
+
+open Function RingHom
+
+variable [CommRing R] [CommRing S]
+variable (f : R →+* S)
+variable {R}
+
+theorem comap_singleton_isClosed_of_surjective (f : R →+* S) (hf : Function.Surjective f)
+ (x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
+ IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
+ haveI : x.asIdeal.IsMaximal := (isClosed_singleton_iff_isMaximal x).1 hx
+ (isClosed_singleton_iff_isMaximal _).2 (Ideal.comap_isMaximal_of_surjective f hf)
+#align prime_spectrum.comap_singleton_is_closed_of_surjective PrimeSpectrum.comap_singleton_isClosed_of_surjective
+
+theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegral)
+ (x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
+ IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
+ (isClosed_singleton_iff_isMaximal _).2
+ (Ideal.isMaximal_comap_of_isIntegral_of_isMaximal' f hf x.asIdeal <|
+ (isClosed_singleton_iff_isMaximal x).1 hx)
+#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegral
+
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
comap f '' zeroLocus I = zeroLocus (I.comap f) := by
simp only [Set.ext_iff, Set.mem_image, mem_zeroLocus, SetLike.coe_subset_coe]
@@ -758,7 +772,10 @@ theorem closedEmbedding_comap_of_surjective (hf : Surjective f) : ClosedEmbeddin
end SpecOfSurjective
-end Comap
+section CommSemiRing
+
+variable [CommSemiring R] [CommSemiring S]
+variable {R S}
section BasicOpen
@@ -848,7 +865,7 @@ theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f := by
exact ⟨fun h I hI => h ⟨I, hI⟩, fun h ⟨I, hI⟩ => h I hI⟩
#align prime_spectrum.basic_open_eq_bot_iff PrimeSpectrum.basicOpen_eq_bot_iff
-theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r : R)
+theorem localization_away_comap_range (S : Type v) [CommSemiring S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : Set.range (comap (algebraMap R S)) = basicOpen r := by
rw [localization_comap_range S (Submonoid.powers r)]
ext x
@@ -861,7 +878,7 @@ theorem localization_away_comap_range (S : Type v) [CommRing S] [Algebra R S] (r
exact h₁ (x.2.mem_of_pow_mem _ h₃)
#align prime_spectrum.localization_away_comap_range PrimeSpectrum.localization_away_comap_range
-theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S] (r : R)
+theorem localization_away_openEmbedding (S : Type v) [CommSemiring S] [Algebra R S] (r : R)
[IsLocalization.Away r S] : OpenEmbedding (comap (algebraMap R S)) :=
{ toEmbedding := localization_comap_embedding S (Submonoid.powers r)
open_range := by
@@ -952,8 +969,13 @@ protected def pointsEquivIrreducibleCloseds :
map_rel_iff' {p q} :=
(RelIso.symm irreducibleSetEquivPoints).map_rel_iff.trans (le_iff_specializes p q).symm
+end CommSemiRing
+
end PrimeSpectrum
+section CommRing
+variable [CommRing R]
+
open PrimeSpectrum in
/--
[Stacks: Lemma 00ES (3)](https://stacks.math.columbia.edu/tag/00ES)
@@ -1002,9 +1024,11 @@ lemma zeroLocus_ideal_mem_irreducibleComponents {I : Ideal R} :
end PrimeSpectrum
+end CommRing
+
namespace LocalRing
-variable [LocalRing R]
+variable [CommSemiring R] [LocalRing R]
/-- The closed point in the prime spectrum of a local ring. -/
def closedPoint : PrimeSpectrum R :=
@@ -1013,8 +1037,8 @@ def closedPoint : PrimeSpectrum R :=
variable {R}
-theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) :
- IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
+theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommSemiring S] [LocalRing S]
+ (f : R →+* S) : IsLocalRingHom f ↔ PrimeSpectrum.comap f (closedPoint S) = closedPoint R := by
-- Porting note : inline `this` does **not** work
have := (local_hom_TFAE f).out 0 4
rw [this, PrimeSpectrum.ext_iff]
@@ -1022,8 +1046,8 @@ theorem isLocalRingHom_iff_comap_closedPoint {S : Type v} [CommRing S] [LocalRin
#align local_ring.is_local_ring_hom_iff_comap_closed_point LocalRing.isLocalRingHom_iff_comap_closedPoint
@[simp]
-theorem comap_closedPoint {S : Type v} [CommRing S] [LocalRing S] (f : R →+* S) [IsLocalRingHom f] :
- PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
+theorem comap_closedPoint {S : Type v} [CommSemiring S] [LocalRing S] (f : R →+* S)
+ [IsLocalRingHom f] : PrimeSpectrum.comap f (closedPoint S) = closedPoint R :=
(isLocalRingHom_iff_comap_closedPoint f).mp inferInstance
#align local_ring.comap_closed_point LocalRing.comap_closedPoint
@@ -1041,8 +1065,8 @@ theorem closedPoint_mem_iff (U : TopologicalSpace.Opens <| PrimeSpectrum R) :
#align local_ring.closed_point_mem_iff LocalRing.closedPoint_mem_iff
@[simp]
-theorem PrimeSpectrum.comap_residue (x : PrimeSpectrum (ResidueField R)) :
- PrimeSpectrum.comap (residue R) x = closedPoint R := by
+theorem PrimeSpectrum.comap_residue (T : Type u) [CommRing T] [LocalRing T]
+ (x : PrimeSpectrum (ResidueField T)) : PrimeSpectrum.comap (residue T) x = closedPoint T := by
rw [Subsingleton.elim x ⊥]
ext1
exact Ideal.mk_ker
Co-PR : #9087 (maximal ideals of Artinian ring are finite)
Co-authored-by: Andrew Yang <the.erd.one@gmail.com> Co-authored-by: Junyan Xu <junyanxumath@gmail.com>
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -6,6 +6,7 @@ Authors: Johan Commelin
import Mathlib.LinearAlgebra.Finsupp
import Mathlib.RingTheory.Ideal.Over
import Mathlib.RingTheory.Ideal.Prod
+import Mathlib.RingTheory.Ideal.MinimalPrime
import Mathlib.RingTheory.Localization.Away.Basic
import Mathlib.RingTheory.Nilpotent
import Mathlib.Topology.Sets.Closeds
@@ -544,6 +545,19 @@ theorem isIrreducible_iff_vanishingIdeal_isPrime {s : Set (PrimeSpectrum R)} :
isIrreducible_zeroLocus_iff_of_radical _ (isRadical_vanishingIdeal s)]
#align prime_spectrum.is_irreducible_iff_vanishing_ideal_is_prime PrimeSpectrum.isIrreducible_iff_vanishingIdeal_isPrime
+lemma vanishingIdeal_isIrreducible {R} [CommRing R] :
+ vanishingIdeal (R := R) '' {s | IsIrreducible s} = {P | P.IsPrime} :=
+ Set.ext fun I ↦ ⟨fun ⟨_, hs, e⟩ ↦ e ▸ isIrreducible_iff_vanishingIdeal_isPrime.mp hs,
+ fun h ↦ ⟨zeroLocus I, (isIrreducible_zeroLocus_iff_of_radical _ h.isRadical).mpr h,
+ (vanishingIdeal_zeroLocus_eq_radical I).trans h.radical⟩⟩
+
+lemma vanishingIdeal_isClosed_isIrreducible {R} [CommRing R] :
+ vanishingIdeal (R := R) '' {s | IsClosed s ∧ IsIrreducible s} = {P | P.IsPrime} := by
+ refine (subset_antisymm ?_ ?_).trans vanishingIdeal_isIrreducible
+ · exact Set.image_subset _ fun _ ↦ And.right
+ rintro _ ⟨s, hs, rfl⟩
+ exact ⟨closure s, ⟨isClosed_closure, hs.closure⟩, vanishingIdeal_closure s⟩
+
instance irreducibleSpace [IsDomain R] : IrreducibleSpace (PrimeSpectrum R) := by
rw [irreducibleSpace_def, Set.top_eq_univ, ← zeroLocus_bot, isIrreducible_zeroLocus_iff]
simpa using Ideal.bot_prime
@@ -927,6 +941,65 @@ def localizationMapOfSpecializes {x y : PrimeSpectrum R} (h : x ⤳ y) :
⟨a, show a ∈ x.asIdeal.primeCompl from h ha⟩ : _))
#align prime_spectrum.localization_map_of_specializes PrimeSpectrum.localizationMapOfSpecializes
+variable (R) in
+/--
+Zero loci of prime ideals are closed irreducible sets in the Zariski topology and any closed
+irreducible set is a zero locus of some prime ideal.
+-/
+protected def pointsEquivIrreducibleCloseds :
+ PrimeSpectrum R ≃o {s : Set (PrimeSpectrum R) | IsIrreducible s ∧ IsClosed s}ᵒᵈ where
+ __ := irreducibleSetEquivPoints.toEquiv.symm.trans OrderDual.toDual
+ map_rel_iff' {p q} :=
+ (RelIso.symm irreducibleSetEquivPoints).map_rel_iff.trans (le_iff_specializes p q).symm
+
+end PrimeSpectrum
+
+open PrimeSpectrum in
+/--
+[Stacks: Lemma 00ES (3)](https://stacks.math.columbia.edu/tag/00ES)
+Zero loci of minimal prime ideals of `R` are irreducible components in `Spec R` and any
+irreducible component is a zero locus of some minimal prime ideal.
+-/
+protected def minimalPrimes.equivIrreducibleComponents :
+ minimalPrimes R ≃o (irreducibleComponents <| PrimeSpectrum R)ᵒᵈ :=
+ let e : {p : Ideal R | p.IsPrime ∧ ⊥ ≤ p} ≃o PrimeSpectrum R :=
+ ⟨⟨fun x ↦ ⟨x.1, x.2.1⟩, fun x ↦ ⟨x.1, x.2, bot_le⟩, fun _ ↦ rfl, fun _ ↦ rfl⟩, Iff.rfl⟩
+ (e.trans <| PrimeSpectrum.pointsEquivIrreducibleCloseds R).minimalsIsoMaximals.trans
+ (OrderIso.setCongr _ _ <| by simp_rw [irreducibleComponents_eq_maximals_closed, and_comm]).dual
+
+namespace PrimeSpectrum
+
+lemma vanishingIdeal_irreducibleComponents :
+ vanishingIdeal '' (irreducibleComponents <| PrimeSpectrum R) =
+ minimalPrimes R := by
+ rw [irreducibleComponents_eq_maximals_closed, minimalPrimes_eq_minimals, ← minimals_swap,
+ ← PrimeSpectrum.vanishingIdeal_isClosed_isIrreducible, image_minimals_of_rel_iff_rel]
+ exact fun s t hs _ ↦ vanishingIdeal_anti_mono_iff hs.1
+
+lemma zeroLocus_minimalPrimes :
+ zeroLocus ∘ (↑) '' minimalPrimes R =
+ irreducibleComponents (PrimeSpectrum R) := by
+ rw [← vanishingIdeal_irreducibleComponents, ← Set.image_comp, Set.EqOn.image_eq_self]
+ intros s hs
+ simpa [zeroLocus_vanishingIdeal_eq_closure, closure_eq_iff_isClosed]
+ using isClosed_of_mem_irreducibleComponents s hs
+
+variable {R}
+
+lemma vanishingIdeal_mem_minimalPrimes {s : Set (PrimeSpectrum R)} :
+ vanishingIdeal s ∈ minimalPrimes R ↔ closure s ∈ irreducibleComponents (PrimeSpectrum R) := by
+ constructor
+ · rw [← zeroLocus_minimalPrimes, ← zeroLocus_vanishingIdeal_eq_closure]
+ exact Set.mem_image_of_mem _
+ · rw [← vanishingIdeal_irreducibleComponents, ← vanishingIdeal_closure]
+ exact Set.mem_image_of_mem _
+
+lemma zeroLocus_ideal_mem_irreducibleComponents {I : Ideal R} :
+ zeroLocus I ∈ irreducibleComponents (PrimeSpectrum R) ↔ I.radical ∈ minimalPrimes R := by
+ rw [← vanishingIdeal_zeroLocus_eq_radical]
+ conv_lhs => rw [← (isClosed_zeroLocus _).closure_eq]
+ exact vanishingIdeal_mem_minimalPrimes.symm
+
end PrimeSpectrum
namespace LocalRing
Mostly, this means replacing "of_open" by "of_isOpen". A few lemmas names were misleading and are corrected differently. Zulip discussion.
@@ -808,7 +808,7 @@ theorem basicOpen_pow (f : R) (n : ℕ) (hn : 0 < n) : basicOpen (f ^ n) = basic
theorem isTopologicalBasis_basic_opens :
TopologicalSpace.IsTopologicalBasis
(Set.range fun r : R => (basicOpen r : Set (PrimeSpectrum R))) := by
- apply TopologicalSpace.isTopologicalBasis_of_open_of_nhds
+ apply TopologicalSpace.isTopologicalBasis_of_isOpen_of_nhds
· rintro _ ⟨r, rfl⟩
exact isOpen_basicOpen
· rintro p U hp ⟨s, hs⟩
@@ -485,7 +485,7 @@ theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs :
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
def closedsEmbedding (R : Type*) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
- OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal <| OrderDual.ofDual s) fun s _ =>
+ OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal ↑(OrderDual.ofDual s)) fun s _ =>
(vanishingIdeal_anti_mono_iff s.2).symm
#align prime_spectrum.closeds_embedding PrimeSpectrum.closedsEmbedding
@@ -298,7 +298,7 @@ theorem zeroLocus_empty_iff_eq_top {I : Ideal R} : zeroLocus (I : Set R) = ∅
· contrapose!
intro h
rcases Ideal.exists_le_maximal I h with ⟨M, hM, hIM⟩
- exact Set.Nonempty.ne_empty ⟨⟨M, hM.isPrime⟩, hIM⟩
+ exact ⟨⟨M, hM.isPrime⟩, hIM⟩
· rintro rfl
apply zeroLocus_empty_of_one_mem
trivial
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -101,7 +101,7 @@ noncomputable def primeSpectrumProd :
· exact False.elim (hJ.ne_top h.right)
· simp only [h]
· rintro ⟨I, hI⟩
- rcases(Ideal.ideal_prod_prime I).mp hI with (⟨p, ⟨hp, rfl⟩⟩ | ⟨p, ⟨hp, rfl⟩⟩)
+ rcases (Ideal.ideal_prod_prime I).mp hI with (⟨p, ⟨hp, rfl⟩⟩ | ⟨p, ⟨hp, rfl⟩⟩)
· exact ⟨Sum.inl ⟨p, hp⟩, rfl⟩
· exact ⟨Sum.inr ⟨p, hp⟩, rfl⟩)
#align prime_spectrum.prime_spectrum_prod PrimeSpectrum.primeSpectrumProd
@@ -74,9 +74,9 @@ instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
⟨⟨I, hI.isPrime⟩⟩
/-- The prime spectrum of the zero ring is empty. -/
-theorem punit (x : PrimeSpectrum PUnit) : False :=
- x.1.ne_top_iff_one.1 x.2.1 <| Eq.substr (Subsingleton.elim 1 (0 : PUnit)) x.1.zero_mem
-#align prime_spectrum.punit PrimeSpectrum.punit
+instance [Subsingleton R] : IsEmpty (PrimeSpectrum R) :=
+ ⟨fun x ↦ x.IsPrime.ne_top <| SetLike.ext' <| Subsingleton.eq_univ_of_nonempty x.asIdeal.nonempty⟩
+#noalign prime_spectrum.punit
variable (R S)
@@ -248,12 +248,8 @@ theorem vanishingIdeal_anti_mono {s t : Set (PrimeSpectrum R)} (h : s ⊆ t) :
#align prime_spectrum.vanishing_ideal_anti_mono PrimeSpectrum.vanishingIdeal_anti_mono
theorem zeroLocus_subset_zeroLocus_iff (I J : Ideal R) :
- zeroLocus (I : Set R) ⊆ zeroLocus (J : Set R) ↔ J ≤ I.radical :=
- ⟨fun h =>
- Ideal.radical_le_radical_iff.mp
- (vanishingIdeal_zeroLocus_eq_radical I ▸
- vanishingIdeal_zeroLocus_eq_radical J ▸ vanishingIdeal_anti_mono h),
- fun h => zeroLocus_radical I ▸ zeroLocus_anti_mono_ideal h⟩
+ zeroLocus (I : Set R) ⊆ zeroLocus (J : Set R) ↔ J ≤ I.radical := by
+ rw [subset_zeroLocus_iff_le_vanishingIdeal, vanishingIdeal_zeroLocus_eq_radical]
#align prime_spectrum.zero_locus_subset_zero_locus_iff PrimeSpectrum.zeroLocus_subset_zeroLocus_iff
theorem zeroLocus_subset_zeroLocus_singleton_iff (f g : R) :
@@ -439,34 +435,13 @@ theorem isClosed_zeroLocus (s : Set R) : IsClosed (zeroLocus s) := by
exact ⟨s, rfl⟩
#align prime_spectrum.is_closed_zero_locus PrimeSpectrum.isClosed_zeroLocus
-theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
- IsClosed ({x} : Set (PrimeSpectrum R)) ↔ x.asIdeal.IsMaximal := by
- refine' (isClosed_iff_zeroLocus _).trans ⟨fun h => _, fun h => _⟩
- · obtain ⟨s, hs⟩ := h
- rw [eq_comm, Set.eq_singleton_iff_unique_mem] at hs
- refine'
- ⟨⟨x.2.1, fun I hI =>
- Classical.not_not.1
- (mt (Ideal.exists_le_maximal I) <| not_exists.2 fun J => not_and.2 fun hJ hIJ => _)⟩⟩
- exact
- ne_of_lt (lt_of_lt_of_le hI hIJ)
- (symm <|
- congr_arg PrimeSpectrum.asIdeal
- (hs.2 ⟨J, hJ.isPrime⟩ fun r hr => hIJ (le_of_lt hI <| hs.1 hr)))
- · refine' ⟨x.asIdeal.1, _⟩
- rw [eq_comm, Set.eq_singleton_iff_unique_mem]
- refine' ⟨fun _ h => h, fun y hy => PrimeSpectrum.ext _ _ (h.eq_of_le y.2.ne_top hy).symm⟩
-#align prime_spectrum.is_closed_singleton_iff_is_maximal PrimeSpectrum.isClosed_singleton_iff_isMaximal
-
theorem zeroLocus_vanishingIdeal_eq_closure (t : Set (PrimeSpectrum R)) :
zeroLocus (vanishingIdeal t : Set R) = closure t := by
- apply Set.Subset.antisymm
- · rintro x hx t' ⟨ht', ht⟩
- obtain ⟨fs, rfl⟩ : ∃ s, t' = zeroLocus s := by rwa [isClosed_iff_zeroLocus] at ht'
- rw [subset_zeroLocus_iff_subset_vanishingIdeal] at ht
- exact Set.Subset.trans ht hx
- · rw [(isClosed_zeroLocus _).closure_subset_iff]
- exact subset_zeroLocus_vanishingIdeal t
+ rcases isClosed_iff_zeroLocus (closure t) |>.mp isClosed_closure with ⟨I, hI⟩
+ rw [subset_antisymm_iff, (isClosed_zeroLocus _).closure_subset_iff, hI,
+ subset_zeroLocus_iff_subset_vanishingIdeal, (gc R).u_l_u_eq_u,
+ ← subset_zeroLocus_iff_subset_vanishingIdeal, ← hI]
+ exact ⟨subset_closure, subset_zeroLocus_vanishingIdeal t⟩
#align prime_spectrum.zero_locus_vanishing_ideal_eq_closure PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure
theorem vanishingIdeal_closure (t : Set (PrimeSpectrum R)) :
@@ -478,6 +453,16 @@ theorem closure_singleton (x) : closure ({x} : Set (PrimeSpectrum R)) = zeroLocu
rw [← zeroLocus_vanishingIdeal_eq_closure, vanishingIdeal_singleton]
#align prime_spectrum.closure_singleton PrimeSpectrum.closure_singleton
+theorem isClosed_singleton_iff_isMaximal (x : PrimeSpectrum R) :
+ IsClosed ({x} : Set (PrimeSpectrum R)) ↔ x.asIdeal.IsMaximal := by
+ rw [← closure_subset_iff_isClosed, ← zeroLocus_vanishingIdeal_eq_closure,
+ vanishingIdeal_singleton]
+ constructor <;> intro H
+ · rcases x.asIdeal.exists_le_maximal x.2.1 with ⟨m, hm, hxm⟩
+ exact (congr_arg asIdeal (@H ⟨m, hm.isPrime⟩ hxm)) ▸ hm
+ · exact fun p hp ↦ PrimeSpectrum.ext _ _ (H.eq_of_le p.2.1 hp).symm
+#align prime_spectrum.is_closed_singleton_iff_is_maximal PrimeSpectrum.isClosed_singleton_iff_isMaximal
+
theorem isRadical_vanishingIdeal (s : Set (PrimeSpectrum R)) : (vanishingIdeal s).IsRadical := by
rw [← vanishingIdeal_closure, ← zeroLocus_vanishingIdeal_eq_closure,
vanishingIdeal_zeroLocus_eq_radical]
@@ -568,6 +553,13 @@ instance quasiSober : QuasiSober (PrimeSpectrum R) :=
⟨⟨_, isIrreducible_iff_vanishingIdeal_isPrime.1 h₁⟩, by
rw [IsGenericPoint, closure_singleton, zeroLocus_vanishingIdeal_eq_closure, h₂.closure_eq]⟩⟩
+/-- The prime spectrum of a commutative ring is a compact topological space. -/
+instance compactSpace : CompactSpace (PrimeSpectrum R) := by
+ refine compactSpace_of_finite_subfamily_closed fun S S_closed S_empty ↦ ?_
+ choose I hI using fun i ↦ (isClosed_iff_zeroLocus_ideal (S i)).mp (S_closed i)
+ simp_rw [hI, ← zeroLocus_iSup, zeroLocus_empty_iff_eq_top, ← top_le_iff] at S_empty ⊢
+ exact Ideal.isCompactElement_top.exists_finset_of_le_iSup _ _ S_empty
+
section Comap
variable {S' : Type*} [CommRing S']
@@ -834,33 +826,6 @@ theorem isBasis_basic_opens : TopologicalSpace.Opens.IsBasis (Set.range (@basicO
rfl
#align prime_spectrum.is_basis_basic_opens PrimeSpectrum.isBasis_basic_opens
-theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectrum R)) :=
- isCompact_of_finite_subfamily_closed fun {ι} Z hZc hZ => by
- let I : ι → Ideal R := fun i => vanishingIdeal (Z i)
- have hI : ∀ i, Z i = zeroLocus (I i) := fun i => by
- simpa only [zeroLocus_vanishingIdeal_eq_closure] using (hZc i).closure_eq.symm
- rw [basicOpen_eq_zeroLocus_compl f, Set.inter_comm, ← Set.diff_eq, Set.diff_eq_empty,
- funext hI, ← zeroLocus_iSup] at hZ
- obtain ⟨n, hn⟩ : f ∈ (⨆ i : ι, I i).radical := by
- rw [← vanishingIdeal_zeroLocus_eq_radical]
- apply vanishingIdeal_anti_mono hZ
- exact subset_vanishingIdeal_zeroLocus {f} (Set.mem_singleton f)
- rcases Submodule.exists_finset_of_mem_iSup I hn with ⟨s, hs⟩
- use s
- -- Using simp_rw here, because `hI` and `zeroLocus_iSup` need to be applied underneath binders
- simp_rw [basicOpen_eq_zeroLocus_compl f, Set.inter_comm (zeroLocus {f})ᶜ, ← Set.diff_eq,
- Set.diff_eq_empty]
- rw [show (Set.iInter fun i => Set.iInter fun (_ : i ∈ s) => Z i) =
- Set.iInter fun i => Set.iInter fun (_ : i ∈ s) => zeroLocus (I i) from congr_arg _
- (funext fun i => congr_arg _ (funext fun _ => hI i))]
- simp_rw [← zeroLocus_iSup]
- rw [← zeroLocus_radical]
- -- this one can't be in `simp_rw` because it would loop
- apply zeroLocus_anti_mono
- rw [Set.singleton_subset_iff]
- exact ⟨n, hs⟩
-#align prime_spectrum.is_compact_basic_open PrimeSpectrum.isCompact_basicOpen
-
@[simp]
theorem basicOpen_eq_bot_iff (f : R) : basicOpen f = ⊥ ↔ IsNilpotent f := by
rw [← TopologicalSpace.Opens.coe_inj, basicOpen_eq_zeroLocus_compl]
@@ -890,13 +855,12 @@ theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S]
exact isOpen_basicOpen }
#align prime_spectrum.localization_away_open_embedding PrimeSpectrum.localization_away_openEmbedding
-end BasicOpen
+theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectrum R)) := by
+ rw [← localization_away_comap_range (Localization (Submonoid.powers f))]
+ exact isCompact_range (map_continuous _)
+#align prime_spectrum.is_compact_basic_open PrimeSpectrum.isCompact_basicOpen
-/-- The prime spectrum of a commutative ring is a compact topological space. -/
-instance compactSpace : CompactSpace (PrimeSpectrum R) :=
- { isCompact_univ := by
- convert isCompact_basicOpen (1 : R)
- rw [basicOpen_one, TopologicalSpace.Opens.coe_top] }
+end BasicOpen
section Order
@@ -20,15 +20,15 @@ The prime spectrum of a commutative ring is the type of all prime ideals.
It is naturally endowed with a topology: the Zariski topology.
(It is also naturally endowed with a sheaf of rings,
-which is constructed in `algebraic_geometry.structure_sheaf`.)
+which is constructed in `AlgebraicGeometry.StructureSheaf`.)
## Main definitions
* `PrimeSpectrum R`: The prime spectrum of a commutative ring `R`,
i.e., the set of all prime ideals of `R`.
-* `zero_locus s`: The zero locus of a subset `s` of `R`
+* `zeroLocus s`: The zero locus of a subset `s` of `R`
is the subset of `PrimeSpectrum R` consisting of all prime ideals that contain `s`.
-* `vanishing_ideal t`: The vanishing ideal of a subset `t` of `PrimeSpectrum R`
+* `vanishingIdeal t`: The vanishing ideal of a subset `t` of `PrimeSpectrum R`
is the intersection of points in `t` (viewed as prime ideals).
## Conventions
@@ -55,7 +55,7 @@ variable (R : Type u) (S : Type v) [CommRing R] [CommRing S]
/-- The prime spectrum of a commutative ring `R` is the type of all prime ideals of `R`.
It is naturally endowed with a topology (the Zariski topology),
-and a sheaf of commutative rings (see `algebraic_geometry.structure_sheaf`).
+and a sheaf of commutative rings (see `AlgebraicGeometry.StructureSheaf`).
It is a fundamental building block in algebraic geometry. -/
@[ext]
structure PrimeSpectrum where
@@ -74,9 +74,9 @@ instance [Nontrivial R] : Nonempty <| PrimeSpectrum R :=
⟨⟨I, hI.isPrime⟩⟩
/-- The prime spectrum of the zero ring is empty. -/
-theorem pUnit (x : PrimeSpectrum PUnit) : False :=
+theorem punit (x : PrimeSpectrum PUnit) : False :=
x.1.ne_top_iff_one.1 x.2.1 <| Eq.substr (Subsingleton.elim 1 (0 : PUnit)) x.1.zero_mem
-#align prime_spectrum.punit PrimeSpectrum.pUnit
+#align prime_spectrum.punit PrimeSpectrum.punit
variable (R S)
@@ -127,7 +127,7 @@ of the ring that contain the set `s`.
An element `f` of `R` can be thought of as a dependent function on the prime spectrum of `R`.
At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in the quotient ring
-`R` modulo the prime ideal `x`. In this manner, `zero_locus s` is exactly the subset of
+`R` modulo the prime ideal `x`. In this manner, `zeroLocus s` is exactly the subset of
`PrimeSpectrum R` where all "functions" in `s` vanish simultaneously.
-/
def zeroLocus (s : Set R) : Set (PrimeSpectrum R) :=
@@ -150,7 +150,7 @@ the intersection of all the prime ideals in the set `t`.
An element `f` of `R` can be thought of as a dependent function on the prime spectrum of `R`.
At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in the quotient ring
-`R` modulo the prime ideal `x`. In this manner, `vanishing_ideal t` is exactly the ideal of `R`
+`R` modulo the prime ideal `x`. In this manner, `vanishingIdeal t` is exactly the ideal of `R`
consisting of all "functions" that vanish on all of `t`.
-/
def vanishingIdeal (t : Set (PrimeSpectrum R)) : Ideal R :=
@@ -185,14 +185,14 @@ section Gc
variable (R)
-/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
+/-- `zeroLocus` and `vanishingIdeal` form a galois connection. -/
theorem gc :
@GaloisConnection (Ideal R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun I => zeroLocus I) fun t =>
vanishingIdeal t :=
fun I t => subset_zeroLocus_iff_le_vanishingIdeal t I
#align prime_spectrum.gc PrimeSpectrum.gc
-/-- `zero_locus` and `vanishing_ideal` form a galois connection. -/
+/-- `zeroLocus` and `vanishingIdeal` form a galois connection. -/
theorem gc_set :
@GaloisConnection (Set R) (Set (PrimeSpectrum R))ᵒᵈ _ _ (fun s => zeroLocus s) fun t =>
vanishingIdeal t := by
@@ -402,13 +402,15 @@ theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
of the topology: they are exactly those sets that are the zero locus of a subset of the ring. -/
instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
TopologicalSpace.ofClosed (Set.range PrimeSpectrum.zeroLocus) ⟨Set.univ, by simp⟩
- (by intro Zs h
- rw [Set.sInter_eq_iInter]
- choose f hf using fun i : Zs => h i.prop
- simp only [← hf]
- exact ⟨_, zeroLocus_iUnion _⟩)
- (by rintro _ ⟨s, rfl⟩ _ ⟨t, rfl⟩
- exact ⟨_, (union_zeroLocus s t).symm⟩)
+ (by
+ intro Zs h
+ rw [Set.sInter_eq_iInter]
+ choose f hf using fun i : Zs => h i.prop
+ simp only [← hf]
+ exact ⟨_, zeroLocus_iUnion _⟩)
+ (by
+ rintro _ ⟨s, rfl⟩ _ ⟨t, rfl⟩
+ exact ⟨_, (union_zeroLocus s t).symm⟩)
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
@@ -519,7 +521,6 @@ theorem t1Space_iff_isField [IsDomain R] : T1Space (PrimeSpectrum R) ↔ IsField
· exact absurd h (Ring.not_isField_iff_exists_prime.2 ⟨x.asIdeal, ⟨hx, x.2⟩⟩)
#align prime_spectrum.t1_space_iff_is_field PrimeSpectrum.t1Space_iff_isField
--- mathport name: «exprZ( )»
local notation "Z(" a ")" => zeroLocus (a : Set R)
theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical) :
@@ -576,8 +577,7 @@ theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
zeroLocus s =
zeroLocus (f '' s) := by
ext x
- simp only [mem_zeroLocus, Set.image_subset_iff]
- rfl
+ simp only [mem_zeroLocus, Set.image_subset_iff, Set.mem_preimage, mem_zeroLocus, Ideal.coe_comap]
#align prime_spectrum.preimage_comap_zero_locus_aux PrimeSpectrum.preimage_comap_zeroLocus_aux
/-- The function between prime spectra of commutative rings induced by a ring homomorphism.
@@ -697,20 +697,19 @@ section SpecOfSurjective
open Function RingHom
-theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
- {
- induced := by
- simp_rw [TopologicalSpace.ext_iff, ← isClosed_compl_iff,
- ← @isClosed_compl_iff (PrimeSpectrum S)
- ((TopologicalSpace.induced (comap f) zariskiTopology)), isClosed_induced_iff,
- isClosed_iff_zeroLocus]
- refine' fun s =>
- ⟨fun ⟨F, hF⟩ =>
- ⟨zeroLocus (f ⁻¹' F), ⟨f ⁻¹' F, rfl⟩, by
- rw [preimage_comap_zeroLocus, Function.Surjective.image_preimage hf, hF]⟩,
- _⟩
- rintro ⟨-, ⟨F, rfl⟩, hF⟩
- exact ⟨f '' F, hF.symm.trans (preimage_comap_zeroLocus f F)⟩ }
+theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) where
+ induced := by
+ simp_rw [TopologicalSpace.ext_iff, ← isClosed_compl_iff,
+ ← @isClosed_compl_iff (PrimeSpectrum S)
+ ((TopologicalSpace.induced (comap f) zariskiTopology)), isClosed_induced_iff,
+ isClosed_iff_zeroLocus]
+ refine' fun s =>
+ ⟨fun ⟨F, hF⟩ =>
+ ⟨zeroLocus (f ⁻¹' F), ⟨f ⁻¹' F, rfl⟩, by
+ rw [preimage_comap_zeroLocus, Function.Surjective.image_preimage hf, hF]⟩,
+ _⟩
+ rintro ⟨-, ⟨F, rfl⟩, hF⟩
+ exact ⟨f '' F, hF.symm.trans (preimage_comap_zeroLocus f F)⟩
#align prime_spectrum.comap_inducing_of_surjective PrimeSpectrum.comap_inducing_of_surjective
theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal S) :
@@ -724,8 +723,7 @@ theorem image_comap_zeroLocus_eq_zeroLocus_comap (hf : Surjective f) (I : Ideal
· obtain ⟨x', rfl⟩ := hf x
exact Ideal.mem_map_of_mem f (h_I_p hx)
· ext x
- change f x ∈ p.asIdeal.map f ↔ _
- rw [Ideal.mem_map_iff_of_surjective f hf]
+ rw [comap_asIdeal, Ideal.mem_comap, Ideal.mem_map_iff_of_surjective f hf]
refine' ⟨_, fun hx => ⟨x, hx, rfl⟩⟩
rintro ⟨x', hx', heq⟩
rw [← sub_sub_cancel x' x]
@@ -758,7 +756,7 @@ end Comap
section BasicOpen
-/-- `basic_open r` is the open subset containing all prime ideals not containing `r`. -/
+/-- `basicOpen r` is the open subset containing all prime ideals not containing `r`. -/
def basicOpen (r : R) : TopologicalSpace.Opens (PrimeSpectrum R) where
carrier := { x | r ∉ x.asIdeal }
is_open' := ⟨{r}, Set.ext fun _ => Set.singleton_subset_iff.trans <| Classical.not_not.symm⟩
@@ -849,7 +847,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
exact subset_vanishingIdeal_zeroLocus {f} (Set.mem_singleton f)
rcases Submodule.exists_finset_of_mem_iSup I hn with ⟨s, hs⟩
use s
- -- Using simp_rw here, because `hI` and `zero_locus_supr` need to be applied underneath binders
+ -- Using simp_rw here, because `hI` and `zeroLocus_iSup` need to be applied underneath binders
simp_rw [basicOpen_eq_zeroLocus_compl f, Set.inter_comm (zeroLocus {f})ᶜ, ← Set.diff_eq,
Set.diff_eq_empty]
rw [show (Set.iInter fun i => Set.iInter fun (_ : i ∈ s) => Z i) =
@@ -898,8 +896,7 @@ end BasicOpen
instance compactSpace : CompactSpace (PrimeSpectrum R) :=
{ isCompact_univ := by
convert isCompact_basicOpen (1 : R)
- rw [basicOpen_one]
- rfl }
+ rw [basicOpen_one, TopologicalSpace.Opens.coe_top] }
section Order
@@ -645,7 +645,7 @@ variable (S)
theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalization M S] :
Inducing (comap (algebraMap R S)) := by
constructor
- rw [topologicalSpace_eq_iff]
+ rw [TopologicalSpace.ext_iff]
intro U
rw [← isClosed_compl_iff, ← @isClosed_compl_iff (α := PrimeSpectrum S) (s := U)]
generalize Uᶜ = Z
@@ -700,7 +700,7 @@ open Function RingHom
theorem comap_inducing_of_surjective (hf : Surjective f) : Inducing (comap f) :=
{
induced := by
- simp_rw [topologicalSpace_eq_iff, ← isClosed_compl_iff,
+ simp_rw [TopologicalSpace.ext_iff, ← isClosed_compl_iff,
← @isClosed_compl_iff (PrimeSpectrum S)
((TopologicalSpace.induced (comap f) zariskiTopology)), isClosed_induced_iff,
isClosed_iff_zeroLocus]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -332,12 +332,12 @@ theorem vanishingIdeal_union (t t' : Set (PrimeSpectrum R)) :
(gc R).u_inf
#align prime_spectrum.vanishing_ideal_union PrimeSpectrum.vanishingIdeal_union
-theorem zeroLocus_iSup {ι : Sort _} (I : ι → Ideal R) :
+theorem zeroLocus_iSup {ι : Sort*} (I : ι → Ideal R) :
zeroLocus ((⨆ i, I i : Ideal R) : Set R) = ⋂ i, zeroLocus (I i) :=
(gc R).l_iSup
#align prime_spectrum.zero_locus_supr PrimeSpectrum.zeroLocus_iSup
-theorem zeroLocus_iUnion {ι : Sort _} (s : ι → Set R) :
+theorem zeroLocus_iUnion {ι : Sort*} (s : ι → Set R) :
zeroLocus (⋃ i, s i) = ⋂ i, zeroLocus (s i) :=
(gc_set R).l_iSup
#align prime_spectrum.zero_locus_Union PrimeSpectrum.zeroLocus_iUnion
@@ -346,7 +346,7 @@ theorem zeroLocus_bUnion (s : Set (Set R)) :
zeroLocus (⋃ s' ∈ s, s' : Set R) = ⋂ s' ∈ s, zeroLocus s' := by simp only [zeroLocus_iUnion]
#align prime_spectrum.zero_locus_bUnion PrimeSpectrum.zeroLocus_bUnion
-theorem vanishingIdeal_iUnion {ι : Sort _} (t : ι → Set (PrimeSpectrum R)) :
+theorem vanishingIdeal_iUnion {ι : Sort*} (t : ι → Set (PrimeSpectrum R)) :
vanishingIdeal (⋃ i, t i) = ⨅ i, vanishingIdeal (t i) :=
(gc R).u_iInf
#align prime_spectrum.vanishing_ideal_Union PrimeSpectrum.vanishingIdeal_iUnion
@@ -496,7 +496,7 @@ theorem vanishingIdeal_strict_anti_mono_iff {s t : Set (PrimeSpectrum R)} (hs :
#align prime_spectrum.vanishing_ideal_strict_anti_mono_iff PrimeSpectrum.vanishingIdeal_strict_anti_mono_iff
/-- The antitone order embedding of closed subsets of `Spec R` into ideals of `R`. -/
-def closedsEmbedding (R : Type _) [CommRing R] :
+def closedsEmbedding (R : Type*) [CommRing R] :
(TopologicalSpace.Closeds <| PrimeSpectrum R)ᵒᵈ ↪o Ideal R :=
OrderEmbedding.ofMapLEIff (fun s => vanishingIdeal <| OrderDual.ofDual s) fun s _ =>
(vanishingIdeal_anti_mono_iff s.2).symm
@@ -569,7 +569,7 @@ instance quasiSober : QuasiSober (PrimeSpectrum R) :=
section Comap
-variable {S' : Type _} [CommRing S']
+variable {S' : Type*} [CommRing S']
theorem preimage_comap_zeroLocus_aux (f : R →+* S) (s : Set R) :
(fun y => ⟨Ideal.comap f y.asIdeal, inferInstance⟩ : PrimeSpectrum S → PrimeSpectrum R) ⁻¹'
@@ -946,7 +946,7 @@ instance [IsDomain R] : OrderBot (PrimeSpectrum R) where
bot := ⟨⊥, Ideal.bot_prime⟩
bot_le I := @bot_le _ _ _ I.asIdeal
-instance {R : Type _} [Field R] : Unique (PrimeSpectrum R) where
+instance {R : Type*} [Field R] : Unique (PrimeSpectrum R) where
default := ⊥
uniq x := PrimeSpectrum.ext _ _ ((IsSimpleOrder.eq_bot_or_eq_top _).resolve_right x.2.ne_top)
@@ -655,7 +655,7 @@ theorem localization_comap_inducing [Algebra R S] (M : Submonoid R) [IsLocalizat
refine ⟨_, ⟨algebraMap R S ⁻¹' Ideal.span s, rfl⟩, ?_⟩
rw [preimage_comap_zeroLocus, ← zeroLocus_span, ← zeroLocus_span s]
congr 2
- exact congr_arg (zeroLocus .) <| Submodule.carrier_inj.mpr
+ exact congr_arg (zeroLocus ·) <| Submodule.carrier_inj.mpr
(IsLocalization.map_comap M S (Ideal.span s))
· rintro ⟨_, ⟨t, rfl⟩, rfl⟩
rw [preimage_comap_zeroLocus]
@@ -2,11 +2,6 @@
Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module algebraic_geometry.prime_spectrum.basic
-! leanprover-community/mathlib commit a7c017d750512a352b623b1824d75da5998457d0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.LinearAlgebra.Finsupp
import Mathlib.RingTheory.Ideal.Over
@@ -16,6 +11,8 @@ import Mathlib.RingTheory.Nilpotent
import Mathlib.Topology.Sets.Closeds
import Mathlib.Topology.Sober
+#align_import algebraic_geometry.prime_spectrum.basic from "leanprover-community/mathlib"@"a7c017d750512a352b623b1824d75da5998457d0"
+
/-!
# Prime spectrum of a commutative ring
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -398,7 +398,7 @@ theorem sup_vanishingIdeal_le (t t' : Set (PrimeSpectrum R)) :
theorem mem_compl_zeroLocus_iff_not_mem {f : R} {I : PrimeSpectrum R} :
I ∈ (zeroLocus {f} : Set (PrimeSpectrum R))ᶜ ↔ f ∉ I.asIdeal := by
- rw [Set.mem_compl_iff, mem_zeroLocus, Set.singleton_subset_iff] ; rfl
+ rw [Set.mem_compl_iff, mem_zeroLocus, Set.singleton_subset_iff]; rfl
#align prime_spectrum.mem_compl_zero_locus_iff_not_mem PrimeSpectrum.mem_compl_zeroLocus_iff_not_mem
/-- The Zariski topology on the prime spectrum of a commutative ring is defined via the closed sets
@@ -415,7 +415,7 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
- simp only [@eq_comm _ Uᶜ] ; rfl
+ simp only [@eq_comm _ Uᶜ]; rfl
#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iff
theorem isClosed_iff_zeroLocus (Z : Set (PrimeSpectrum R)) : IsClosed Z ↔ ∃ s, Z = zeroLocus s := by
Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: int-y1 <jason_yuen2007@hotmail.com> Co-authored-by: Antoine Chambert-Loir <antoine.chambert-loir@math.univ-paris-diderot.fr> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -639,7 +639,7 @@ theorem comap_singleton_isClosed_of_isIntegral (f : R →+* S) (hf : f.IsIntegra
(x : PrimeSpectrum S) (hx : IsClosed ({x} : Set (PrimeSpectrum S))) :
IsClosed ({comap f x} : Set (PrimeSpectrum R)) :=
(isClosed_singleton_iff_isMaximal _).2
- (Ideal.isMaximal_comap_of_isIntegral_of_is_maximal' f hf x.asIdeal <|
+ (Ideal.isMaximal_comap_of_isIntegral_of_isMaximal' f hf x.asIdeal <|
(isClosed_singleton_iff_isMaximal x).1 hx)
#align prime_spectrum.comap_singleton_is_closed_of_is_integral PrimeSpectrum.comap_singleton_isClosed_of_isIntegral
@@ -415,7 +415,7 @@ instance zariskiTopology : TopologicalSpace (PrimeSpectrum R) :=
#align prime_spectrum.zariski_topology PrimeSpectrum.zariskiTopology
theorem isOpen_iff (U : Set (PrimeSpectrum R)) : IsOpen U ↔ ∃ s, Uᶜ = zeroLocus s := by
- simp only [@eq_comm _ (Uᶜ)] ; rfl
+ simp only [@eq_comm _ Uᶜ] ; rfl
#align prime_spectrum.is_open_iff PrimeSpectrum.isOpen_iff
theorem isClosed_iff_zeroLocus (Z : Set (PrimeSpectrum R)) : IsClosed Z ↔ ∃ s, Z = zeroLocus s := by
@@ -778,7 +778,7 @@ theorem isOpen_basicOpen {a : R} : IsOpen (basicOpen a : Set (PrimeSpectrum R))
@[simp]
theorem basicOpen_eq_zeroLocus_compl (r : R) :
- (basicOpen r : Set (PrimeSpectrum R)) = zeroLocus {r}ᶜ :=
+ (basicOpen r : Set (PrimeSpectrum R)) = (zeroLocus {r})ᶜ :=
Set.ext fun x => by simp only [SetLike.mem_coe, mem_basicOpen, Set.mem_compl_iff, mem_zeroLocus,
Set.singleton_subset_iff]
#align prime_spectrum.basic_open_eq_zero_locus_compl PrimeSpectrum.basicOpen_eq_zeroLocus_compl
@@ -853,7 +853,7 @@ theorem isCompact_basicOpen (f : R) : IsCompact (basicOpen f : Set (PrimeSpectru
rcases Submodule.exists_finset_of_mem_iSup I hn with ⟨s, hs⟩
use s
-- Using simp_rw here, because `hI` and `zero_locus_supr` need to be applied underneath binders
- simp_rw [basicOpen_eq_zeroLocus_compl f, Set.inter_comm (zeroLocus {f}ᶜ), ← Set.diff_eq,
+ simp_rw [basicOpen_eq_zeroLocus_compl f, Set.inter_comm (zeroLocus {f})ᶜ, ← Set.diff_eq,
Set.diff_eq_empty]
rw [show (Set.iInter fun i => Set.iInter fun (_ : i ∈ s) => Z i) =
Set.iInter fun i => Set.iInter fun (_ : i ∈ s) => zeroLocus (I i) from congr_arg _
@@ -561,11 +561,11 @@ theorem isIrreducible_iff_vanishingIdeal_isPrime {s : Set (PrimeSpectrum R)} :
isIrreducible_zeroLocus_iff_of_radical _ (isRadical_vanishingIdeal s)]
#align prime_spectrum.is_irreducible_iff_vanishing_ideal_is_prime PrimeSpectrum.isIrreducible_iff_vanishingIdeal_isPrime
-instance [IsDomain R] : IrreducibleSpace (PrimeSpectrum R) := by
+instance irreducibleSpace [IsDomain R] : IrreducibleSpace (PrimeSpectrum R) := by
rw [irreducibleSpace_def, Set.top_eq_univ, ← zeroLocus_bot, isIrreducible_zeroLocus_iff]
simpa using Ideal.bot_prime
-instance : QuasiSober (PrimeSpectrum R) :=
+instance quasiSober : QuasiSober (PrimeSpectrum R) :=
⟨fun {S} h₁ h₂ =>
⟨⟨_, isIrreducible_iff_vanishingIdeal_isPrime.1 h₁⟩, by
rw [IsGenericPoint, closure_singleton, zeroLocus_vanishingIdeal_eq_closure, h₂.closure_eq]⟩⟩
@@ -898,7 +898,7 @@ theorem localization_away_openEmbedding (S : Type v) [CommRing S] [Algebra R S]
end BasicOpen
/-- The prime spectrum of a commutative ring is a compact topological space. -/
-instance : CompactSpace (PrimeSpectrum R) :=
+instance compactSpace : CompactSpace (PrimeSpectrum R) :=
{ isCompact_univ := by
convert isCompact_basicOpen (1 : R)
rw [basicOpen_one]
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -543,7 +543,7 @@ theorem isIrreducible_zeroLocus_iff_of_radical (I : Ideal R) (hI : I.IsRadical)
· simp_rw [← SetLike.mem_coe, ← Set.singleton_subset_iff, ← Ideal.span_le, ←
Ideal.span_singleton_mul_span_singleton]
refine' fun h x y h' => h _ _ _
- rw [← hI.radical_le_iff] at h'⊢
+ rw [← hI.radical_le_iff] at h' ⊢
simpa only [Ideal.radical_inf, Ideal.radical_mul] using h'
· simp_rw [or_iff_not_imp_left, SetLike.not_le_iff_exists]
rintro h s t h' ⟨x, hx, hx'⟩ y hy
@@ -899,10 +899,10 @@ end BasicOpen
/-- The prime spectrum of a commutative ring is a compact topological space. -/
instance : CompactSpace (PrimeSpectrum R) :=
-{ isCompact_univ := by
- convert isCompact_basicOpen (1 : R)
- rw [basicOpen_one]
- rfl }
+ { isCompact_univ := by
+ convert isCompact_basicOpen (1 : R)
+ rw [basicOpen_one]
+ rfl }
section Order
@@ -157,7 +157,7 @@ At a point `x` (a prime ideal) the function (i.e., element) `f` takes values in
consisting of all "functions" that vanish on all of `t`.
-/
def vanishingIdeal (t : Set (PrimeSpectrum R)) : Ideal R :=
- ⨅ (x : PrimeSpectrum R) (__ : x ∈ t), x.asIdeal
+ ⨅ (x : PrimeSpectrum R) (_ : x ∈ t), x.asIdeal
#align prime_spectrum.vanishing_ideal PrimeSpectrum.vanishingIdeal
theorem coe_vanishingIdeal (t : Set (PrimeSpectrum R)) :
The unported dependencies are