algebraic_geometry.projective_spectrum.scheme
⟷
Mathlib.AlgebraicGeometry.ProjectiveSpectrum.Scheme
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)
(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)
(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)
(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
@@ -169,9 +169,9 @@ theorem MemCarrier.clear_denominator' [DecidableEq (Away f)] {z : Localization.A
(∑ i in c.support.attach,
acd (c i) (Finset.mem_image.mpr ⟨i, ⟨i.2, rfl⟩⟩) * i.1.2.some) :=
by
- rw [← submodule_span_eq, Finsupp.span_eq_range_total, LinearMap.mem_range] at hz
+ rw [← submodule_span_eq, Finsupp.span_eq_range_total, LinearMap.mem_range] at hz
rcases hz with ⟨c, eq1⟩
- rw [Finsupp.total_apply, Finsupp.sum] at eq1
+ rw [Finsupp.total_apply, Finsupp.sum] at eq1
obtain ⟨⟨_, N, rfl⟩, hN⟩ :=
IsLocalization.exist_integer_multiples_of_finset (Submonoid.powers f) (c.support.image c)
choose acd hacd using hN
@@ -200,13 +200,13 @@ theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz :
theorem disjoint : Disjoint (x.1.asHomogeneousIdeal.toIdeal : Set A) (Submonoid.powers f : Set A) :=
by
by_contra rid
- rw [Set.not_disjoint_iff] at rid
+ rw [Set.not_disjoint_iff] at rid
choose g hg using rid
obtain ⟨hg1, ⟨k, rfl⟩⟩ := hg
by_cases k_ineq : 0 < k
- · erw [x.1.IsPrime.pow_mem_iff_mem _ k_ineq] at hg1
+ · erw [x.1.IsPrime.pow_mem_iff_mem _ k_ineq] at hg1
exact x.2 hg1
- · erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1
+ · erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1
apply x.1.IsPrime.1
exact hg1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.disjoint AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.disjoint
@@ -219,12 +219,12 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
classical
contrapose! eq_top
obtain ⟨c, N, acd, eq1⟩ := mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
- rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
- change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
+ change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- erw [one_mul, one_mul] at eq1
- change f ^ _ * f ^ _ = f ^ _ * _ at eq1
+ erw [one_mul, one_mul] at eq1
+ change f ^ _ * f ^ _ = f ^ _ * _ at eq1
rw [Set.not_disjoint_iff_nonempty_inter]
refine'
⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
@@ -246,20 +246,20 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
simp only [mem_carrier_iff] at hx12 ⊢
let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
+ · rw [HomogeneousLocalization.mul_val] at hx12; exact h x1.val x2.val hx12
clear x1 x2 hx12
intro x1 x2 hx12
induction' x1 using Localization.induction_on with data_x1
induction' x2 using Localization.induction_on with data_x2
rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
- simp only [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
- simp only [Localization.mk_mul, one_mul] at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ simp only [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
+ simp only [Localization.mk_mul, one_mul] at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
+ rw [Submonoid.coe_one, one_mul] at eq1
+ change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
@@ -296,7 +296,7 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
ext1 y
constructor <;> intro hy
· refine' ⟨y.2, _⟩
- rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
+ rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
rw [ProjectiveSpectrum.mem_coe_basicOpen]
intro a_mem_y
apply hy
@@ -305,18 +305,18 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
- · change y.1 ∈ _ at hy
+ · change y.1 ∈ _ at hy
rcases hy with ⟨hy1, hy2⟩
- rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
+ rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
- intro rid; dsimp at rid
+ intro rid; dsimp at rid
rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
- rw [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
- rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
+ rw [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
+ rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- simp only [Subtype.coe_mk] at eq1
+ rw [Submonoid.coe_one, one_mul] at eq1
+ simp only [Subtype.coe_mk] at eq1
rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
· exact hy2 H1
@@ -434,7 +434,7 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
(by
constructor <;> intro h i <;> specialize h i
· rw [Set.mem_image]; refine' ⟨_, h, rfl⟩
- · rw [Set.mem_image] at h ; rcases h with ⟨x, h, hx⟩
+ · rw [Set.mem_image] at h; rcases h with ⟨x, h, hx⟩
convert h; rw [ext_iff_val, val_mk']; dsimp only [Subtype.coe_mk]; rw [← hx]; rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -217,6 +217,20 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
by
have eq_top := Disjoint x
classical
+ contrapose! eq_top
+ obtain ⟨c, N, acd, eq1⟩ := mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
+ rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
+ change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ erw [one_mul, one_mul] at eq1
+ change f ^ _ * f ^ _ = f ^ _ * _ at eq1
+ rw [Set.not_disjoint_iff_nonempty_inter]
+ refine'
+ ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
+ ⟨M + N, by rw [pow_add]⟩⟩
+ generalize_proofs h₁ h₂
+ exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.carrier_ne_top AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier_ne_top
-/
@@ -227,7 +241,41 @@ variable (f)
`Spec A⁰_f`. This is bundled into a continuous map in `Top_component.forward`.
-/
def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
- ⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by classical⟩
+ ⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by
+ classical
+ simp only [mem_carrier_iff] at hx12 ⊢
+ let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
+ suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
+ · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
+ clear x1 x2 hx12
+ intro x1 x2 hx12
+ induction' x1 using Localization.induction_on with data_x1
+ induction' x2 using Localization.induction_on with data_x2
+ rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
+ rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
+ simp only [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
+ simp only [Localization.mk_mul, one_mul] at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ rw [Submonoid.coe_one, one_mul] at eq1
+ change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
+ rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
+ rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
+ rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
+ · left;
+ simp only [show (mk a1 ⟨f ^ n1, _⟩ : away f) = mk a1 1 * mk 1 ⟨f ^ n1, ⟨n1, rfl⟩⟩ by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
+ · right;
+ simp only [show (mk a2 ⟨f ^ n2, _⟩ : away f) = mk a2 1 * mk 1 ⟨f ^ n2, ⟨n2, rfl⟩⟩ by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
+ · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem N rid1))
+ · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem M rid2))
+ · rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
+ refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun
-/
@@ -243,7 +291,40 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
(@PrimeSpectrum.basicOpen (A⁰_ f) _ (Quotient.mk'' ⟨k, ⟨a, a_mem⟩, ⟨b, b_mem1⟩, b_mem2⟩) :
Set (PrimeSpectrum (HomogeneousLocalization.Away 𝒜 f))) =
{x | x.1 ∈ (pbo f) ⊓ pbo a} :=
- by classical
+ by
+ classical
+ ext1 y
+ constructor <;> intro hy
+ · refine' ⟨y.2, _⟩
+ rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
+ rw [ProjectiveSpectrum.mem_coe_basicOpen]
+ intro a_mem_y
+ apply hy
+ rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
+ dsimp; rcases b_mem2 with ⟨k, hk⟩
+ simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
+ rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
+ exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
+ · change y.1 ∈ _ at hy
+ rcases hy with ⟨hy1, hy2⟩
+ rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
+ rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
+ intro rid; dsimp at rid
+ rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
+ rw [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
+ rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ rw [Submonoid.coe_one, one_mul] at eq1
+ simp only [Subtype.coe_mk] at eq1
+ rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
+ rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
+ · exact hy2 H1
+ · exact y.2 (y.1.IsPrime.mem_of_pow_mem N H2)
+ · exact y.2 (y.1.IsPrime.mem_of_pow_mem M H3)
+ · rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
+ refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -217,20 +217,6 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
by
have eq_top := Disjoint x
classical
- contrapose! eq_top
- obtain ⟨c, N, acd, eq1⟩ := mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
- rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
- change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- erw [one_mul, one_mul] at eq1
- change f ^ _ * f ^ _ = f ^ _ * _ at eq1
- rw [Set.not_disjoint_iff_nonempty_inter]
- refine'
- ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
- ⟨M + N, by rw [pow_add]⟩⟩
- generalize_proofs h₁ h₂
- exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.carrier_ne_top AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier_ne_top
-/
@@ -241,41 +227,7 @@ variable (f)
`Spec A⁰_f`. This is bundled into a continuous map in `Top_component.forward`.
-/
def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
- ⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by
- classical
- simp only [mem_carrier_iff] at hx12 ⊢
- let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
- suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
- clear x1 x2 hx12
- intro x1 x2 hx12
- induction' x1 using Localization.induction_on with data_x1
- induction' x2 using Localization.induction_on with data_x2
- rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
- rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
- simp only [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
- simp only [Localization.mk_mul, one_mul] at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
- rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
- rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
- rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
- · left;
- simp only [show (mk a1 ⟨f ^ n1, _⟩ : away f) = mk a1 1 * mk 1 ⟨f ^ n1, ⟨n1, rfl⟩⟩ by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
- · right;
- simp only [show (mk a2 ⟨f ^ n2, _⟩ : away f) = mk a2 1 * mk 1 ⟨f ^ n2, ⟨n2, rfl⟩⟩ by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
- · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem N rid1))
- · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem M rid2))
- · rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
- refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
+ ⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by classical⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun
-/
@@ -291,40 +243,7 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
(@PrimeSpectrum.basicOpen (A⁰_ f) _ (Quotient.mk'' ⟨k, ⟨a, a_mem⟩, ⟨b, b_mem1⟩, b_mem2⟩) :
Set (PrimeSpectrum (HomogeneousLocalization.Away 𝒜 f))) =
{x | x.1 ∈ (pbo f) ⊓ pbo a} :=
- by
- classical
- ext1 y
- constructor <;> intro hy
- · refine' ⟨y.2, _⟩
- rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
- rw [ProjectiveSpectrum.mem_coe_basicOpen]
- intro a_mem_y
- apply hy
- rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
- dsimp; rcases b_mem2 with ⟨k, hk⟩
- simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
- rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
- exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
- · change y.1 ∈ _ at hy
- rcases hy with ⟨hy1, hy2⟩
- rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
- rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
- intro rid; dsimp at rid
- rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
- rw [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
- rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- simp only [Subtype.coe_mk] at eq1
- rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
- rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
- · exact hy2 H1
- · exact y.2 (y.1.IsPrime.mem_of_pow_mem N H2)
- · exact y.2 (y.1.IsPrime.mem_of_pow_mem M H3)
- · rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
- refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
+ by classical
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang
-/
-import Mathbin.AlgebraicGeometry.ProjectiveSpectrum.StructureSheaf
-import Mathbin.AlgebraicGeometry.Spec
-import Mathbin.RingTheory.GradedAlgebra.Radical
+import AlgebraicGeometry.ProjectiveSpectrum.StructureSheaf
+import AlgebraicGeometry.Spec
+import RingTheory.GradedAlgebra.Radical
#align_import algebraic_geometry.projective_spectrum.scheme from "leanprover-community/mathlib"@"2fe465deb81bcd7ccafa065bb686888a82f15372"
@@ -363,8 +363,8 @@ open _Root_.HomogeneousLocalization
variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m)
-/- ./././Mathport/Syntax/Translate/Expr.lean:336:4: warning: unsupported (TODO): `[tacs] -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:336:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:337:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:337:4: warning: unsupported (TODO): `[tacs] -/
private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -369,8 +369,8 @@ private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier /-
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
@@ -402,8 +402,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff /-
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
@@ -439,14 +439,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.add_mem /-
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
@@ -531,8 +531,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2444063103.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem /-
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang
-
-! This file was ported from Lean 3 source module algebraic_geometry.projective_spectrum.scheme
-! leanprover-community/mathlib commit 2fe465deb81bcd7ccafa065bb686888a82f15372
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.AlgebraicGeometry.ProjectiveSpectrum.StructureSheaf
import Mathbin.AlgebraicGeometry.Spec
import Mathbin.RingTheory.GradedAlgebra.Radical
+#align_import algebraic_geometry.projective_spectrum.scheme from "leanprover-community/mathlib"@"2fe465deb81bcd7ccafa065bb686888a82f15372"
+
/-!
# Proj as a scheme
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang
! This file was ported from Lean 3 source module algebraic_geometry.projective_spectrum.scheme
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 2fe465deb81bcd7ccafa065bb686888a82f15372
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.RingTheory.GradedAlgebra.Radical
/-!
# Proj as a scheme
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file is to prove that `Proj` is a scheme.
## Notation
@@ -369,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier /-
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
@@ -402,8 +405,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff /-
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
@@ -439,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.add_mem /-
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
@@ -531,8 +534,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2357112569.mem_tac -/
#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem /-
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8905e5ed90859939681a725b00f6063e65096d95
@@ -142,6 +142,7 @@ open Ideal
-- and we need this correspondence to be continuous in their Zariski topology.
variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (x : Proj| pbo f)
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier /-
/--
For any `x` in `Proj| (pbo f)`, the corresponding ideal in `Spec A⁰_f`. This fact that this ideal
is prime is proven in `Top_component.forward.to_fun`-/
@@ -149,12 +150,16 @@ def carrier : Ideal (A⁰_ f) :=
Ideal.comap (algebraMap (A⁰_ f) (Away f))
(Ideal.span <| algebraMap A (Away f) '' x.val.asHomogeneousIdeal)
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.mem_carrier_iff /-
theorem mem_carrier_iff (z : A⁰_ f) :
z ∈ carrier 𝒜 x ↔ z.val ∈ Ideal.span (algebraMap A (Away f) '' x.1.asHomogeneousIdeal) :=
Iff.rfl
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier_iff AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.mem_carrier_iff
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator' /-
theorem MemCarrier.clear_denominator' [DecidableEq (Away f)] {z : Localization.Away f}
(hz : z ∈ span (algebraMap A (Away f) '' x.val.asHomogeneousIdeal)) :
∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f) (N : ℕ) (acd :
@@ -177,7 +182,9 @@ theorem MemCarrier.clear_denominator' [DecidableEq (Away f)] {z : Localization.A
rw [_root_.map_mul, hacd, (Classical.choose_spec i.1.2).2, smul_eq_mul, smul_mul_assoc]
rfl
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier.clear_denominator' AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator'
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator /-
theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz : z ∈ carrier 𝒜 x) :
∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f) (N : ℕ) (acd :
∀ y ∈ c.support.image c, A),
@@ -187,7 +194,9 @@ theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz :
acd (c i) (Finset.mem_image.mpr ⟨i, ⟨i.2, rfl⟩⟩) * i.1.2.some) :=
MemCarrier.clear_denominator' x <| (mem_carrier_iff 𝒜 x z).mpr hz
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier.clear_denominator AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.disjoint /-
theorem disjoint : Disjoint (x.1.asHomogeneousIdeal.toIdeal : Set A) (Submonoid.powers f : Set A) :=
by
by_contra rid
@@ -201,7 +210,9 @@ theorem disjoint : Disjoint (x.1.asHomogeneousIdeal.toIdeal : Set A) (Submonoid.
apply x.1.IsPrime.1
exact hg1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.disjoint AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.disjoint
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier_ne_top /-
theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
by
have eq_top := Disjoint x
@@ -221,9 +232,11 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
generalize_proofs h₁ h₂
exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.carrier_ne_top AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier_ne_top
+-/
variable (f)
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun /-
/-- The function between the basic open set `D(f)` in `Proj` to the corresponding basic open set in
`Spec A⁰_f`. This is bundled into a continuous map in `Top_component.forward`.
-/
@@ -264,7 +277,9 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq /-
/-
The preimage of basic open set `D(a/f^n)` in `Spec A⁰_f` under the forward map from `Proj A` to
`Spec A⁰_f` is the basic open set `D(a) ∩ D(f)` in `Proj A`. This lemma is used to prove that the
@@ -311,6 +326,7 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
+-/
end ToSpec
@@ -318,6 +334,7 @@ section
variable {𝒜}
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.toSpec /-
/-- The continuous function between the basic open set `D(f)` in `Proj` to the corresponding basic
open set in `Spec A⁰_f`.
-/
@@ -332,6 +349,7 @@ def toSpec {f : A} : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f
refine' is_open_induced_iff.mpr ⟨(pbo f).1 ⊓ (pbo a).1, IsOpen.inter (pbo f).2 (pbo a).2, _⟩
ext z; constructor <;> intro hz <;> simpa [Set.mem_preimage]
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec AlgebraicGeometry.ProjIsoSpecTopComponent.toSpec
+-/
end
@@ -353,6 +371,7 @@ private unsafe def mem_tac : tactic Unit :=
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier /-
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -381,9 +400,11 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
A⁰_ f) ∈
q.1}
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff /-
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -401,7 +422,9 @@ theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
q.1 :=
Iff.rfl
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff' /-
theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -414,6 +437,7 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
· rw [Set.mem_image] at h ; rcases h with ⟨x, h, hx⟩
convert h; rw [ext_iff_val, val_mk']; dsimp only [Subtype.coe_mk]; rw [← hx]; rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
@@ -423,6 +447,7 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.add_mem /-
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -493,18 +518,22 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
· rw [mul_assoc, ← pow_add, add_comm (m - j), Nat.add_sub_assoc h1]; · simp_rw [pow_add]; rfl
· rw [← mul_assoc, ← pow_add, Nat.add_sub_of_le (le_of_not_le h1)]; · simp_rw [pow_add]; rfl
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.add_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.add_mem
+-/
variable (hm : 0 < m) (q : Spec.T A⁰_ f)
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem /-
theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
by
convert Submodule.zero_mem q.1 using 1
rw [ext_iff_val, val_mk', zero_val]; simp_rw [map_zero, zero_pow hm]
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem /-
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
@@ -532,7 +561,9 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
· simp_rw [zero_pow hm]; convert carrier.zero_mem f_deg hm q i; rw [map_zero, zero_pow hm]
· simp_rw [add_smul]; exact fun _ _ => carrier.add_mem f_deg q
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.smul_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal /-
/-- For a prime ideal `q` in `A⁰_f`, the set `{a | aᵢᵐ/fⁱ ∈ q}` as an ideal.
-/
def carrier.asIdeal : Ideal A where
@@ -541,7 +572,9 @@ def carrier.asIdeal : Ideal A where
add_mem' a b := carrier.add_mem f_deg q
smul_mem' := carrier.smul_mem f_deg hm q
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.homogeneous /-
theorem carrier.asIdeal.homogeneous : (carrier.asIdeal f_deg hm q).Homogeneous 𝒜 := fun i a ha j =>
(em (i = j)).elim (fun h => h ▸ by simpa only [proj_apply, decompose_coe, of_eq_same] using ha _)
fun h =>
@@ -550,13 +583,17 @@ theorem carrier.asIdeal.homogeneous : (carrier.asIdeal f_deg hm q).Homogeneous
zero_pow hm]
convert carrier.zero_mem f_deg hm q j; rw [map_zero, zero_pow hm]
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.homogeneous AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.homogeneous
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asHomogeneousIdeal /-
/-- For a prime ideal `q` in `A⁰_f`, the set `{a | aᵢᵐ/fⁱ ∈ q}` as a homogeneous ideal.
-/
def carrier.asHomogeneousIdeal : HomogeneousIdeal 𝒜 :=
⟨carrier.asIdeal f_deg hm q, carrier.asIdeal.homogeneous f_deg hm q⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_homogeneous_ideal AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asHomogeneousIdeal
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.denom_not_mem /-
theorem carrier.denom_not_mem : f ∉ carrier.asIdeal f_deg hm q := fun rid =>
q.IsPrime.ne_top <|
(Ideal.eq_top_iff_one _).mpr
@@ -565,15 +602,21 @@ theorem carrier.denom_not_mem : f ∉ carrier.asIdeal f_deg hm q := fun rid =>
simpa only [ext_iff_val, one_val, proj_apply, decompose_of_mem_same _ f_deg, val_mk'] using
(mk_self (⟨_, m, rfl⟩ : Submonoid.powers f)).symm)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.denom_not_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.denom_not_mem
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.relevant /-
theorem carrier.relevant : ¬HomogeneousIdeal.irrelevant 𝒜 ≤ carrier.asHomogeneousIdeal f_deg hm q :=
fun rid => carrier.denom_not_mem f_deg hm q <| rid <| DirectSum.decompose_of_mem_ne 𝒜 f_deg hm.ne'
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.relevant AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.relevant
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.ne_top /-
theorem carrier.asIdeal.ne_top : carrier.asIdeal f_deg hm q ≠ ⊤ := fun rid =>
carrier.denom_not_mem f_deg hm q (rid.symm ▸ Submodule.mem_top)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.ne_top AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.ne_top
+-/
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.prime /-
theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
(carrier.asIdeal.homogeneous f_deg hm q).isPrime_of_homogeneous_mem_or_mem
(carrier.asIdeal.ne_top f_deg hm q) fun x y ⟨nx, hnx⟩ ⟨ny, hny⟩ hxy =>
@@ -593,9 +636,11 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
| exact hnx
| exact hny
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.prime AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.prime
+-/
variable (f_deg)
+#print AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.toFun /-
/-- The function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}`.
-/
def toFun : (Spec.T A⁰_ f) → Proj.T| pbo f := fun q =>
@@ -603,6 +648,7 @@ def toFun : (Spec.T A⁰_ f) → Proj.T| pbo f := fun q =>
carrier.relevant f_deg hm q⟩,
(ProjectiveSpectrum.mem_basicOpen _ f _).mp <| carrier.denom_not_mem f_deg hm q⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.toFun
+-/
end FromSpec
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -98,40 +98,31 @@ open CategoryTheory Opposite
open ProjectiveSpectrum.StructureSheaf
--- mathport name: exprProj
local notation "Proj" => Proj.toLocallyRingedSpace 𝒜
--- mathport name: «exprProj.T»
-- `Proj` as a locally ringed space
local notation "Proj.T" => Proj.1.1.1
--- mathport name: «exprProj| »
-- the underlying topological space of `Proj`
local notation "Proj| " U => Proj.restrict (Opens.openEmbedding (U : Opens Proj.T))
--- mathport name: «exprProj.T| »
-- `Proj` restrict to some open set
local notation "Proj.T| " U =>
(Proj.restrict (Opens.openEmbedding (U : Opens Proj.T))).toSheafedSpace.toPresheafedSpace.1
--- mathport name: «exprpbo »
-- the underlying topological space of `Proj` restricted to some open set
local notation "pbo " x => ProjectiveSpectrum.basicOpen 𝒜 x
--- mathport name: «exprsbo »
-- basic open sets in `Proj`
local notation "sbo " f => PrimeSpectrum.basicOpen f
--- mathport name: «exprSpec »
-- basic open sets in `Spec`
local notation "Spec " ring => Spec.locallyRingedSpaceObj (CommRingCat.of Ring)
--- mathport name: «exprSpec.T »
-- `Spec` as a locally ringed space
local notation "Spec.T " ring =>
(Spec.locallyRingedSpaceObj (CommRingCat.of Ring)).toSheafedSpace.toPresheafedSpace.1
--- mathport name: «exprA⁰_ »
-- the underlying topological space of `Spec`
local notation "A⁰_ " f => HomogeneousLocalization.Away 𝒜 f
@@ -360,8 +351,6 @@ private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
-include f_deg
-
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
@@ -507,8 +496,6 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
variable (hm : 0 < m) (q : Spec.T A⁰_ f)
-include hm
-
theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
by
convert Submodule.zero_mem q.1 using 1
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -489,7 +489,7 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
run_tac
mem_tac;
rw [← add_smul]; congr; zify [le_of_not_lt h2, le_of_not_le h1]; abel
- convert_to (∑ i in range (m + m + 1), g i) ∈ q.1; swap
+ convert_to ∑ i in range (m + m + 1), g i ∈ q.1; swap
· refine' q.1.sum_mem fun j hj => nsmul_mem _ _; split_ifs
exacts [q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
rw [ext_iff_val, val_mk']
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -354,8 +354,8 @@ open _Root_.HomogeneousLocalization
variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m)
-/- ./././Mathport/Syntax/Translate/Expr.lean:330:4: warning: unsupported (TODO): `[tacs] -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:330:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:336:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:336:4: warning: unsupported (TODO): `[tacs] -/
private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -215,21 +215,20 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
by
have eq_top := Disjoint x
classical
- contrapose! eq_top
- obtain ⟨c, N, acd, eq1⟩ :=
- mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
- rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
- change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- erw [one_mul, one_mul] at eq1
- change f ^ _ * f ^ _ = f ^ _ * _ at eq1
- rw [Set.not_disjoint_iff_nonempty_inter]
- refine'
- ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
- ⟨M + N, by rw [pow_add]⟩⟩
- generalize_proofs h₁ h₂
- exact (Classical.choose_spec h₂).1
+ contrapose! eq_top
+ obtain ⟨c, N, acd, eq1⟩ := mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
+ rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
+ change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ erw [one_mul, one_mul] at eq1
+ change f ^ _ * f ^ _ = f ^ _ * _ at eq1
+ rw [Set.not_disjoint_iff_nonempty_inter]
+ refine'
+ ⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
+ ⟨M + N, by rw [pow_add]⟩⟩
+ generalize_proofs h₁ h₂
+ exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.carrier_ne_top AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.carrier_ne_top
variable (f)
@@ -240,39 +239,39 @@ variable (f)
def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by
classical
- simp only [mem_carrier_iff] at hx12 ⊢
- let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
- suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
- clear x1 x2 hx12
- intro x1 x2 hx12
- induction' x1 using Localization.induction_on with data_x1
- induction' x2 using Localization.induction_on with data_x2
- rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
- rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
- simp only [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
- simp only [Localization.mk_mul, one_mul] at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
- rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
- rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
- rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
- · left;
- simp only [show (mk a1 ⟨f ^ n1, _⟩ : away f) = mk a1 1 * mk 1 ⟨f ^ n1, ⟨n1, rfl⟩⟩ by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
- · right;
- simp only [show (mk a2 ⟨f ^ n2, _⟩ : away f) = mk a2 1 * mk 1 ⟨f ^ n2, ⟨n2, rfl⟩⟩ by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
- · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem N rid1))
- · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem M rid2))
- · rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
- refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
+ simp only [mem_carrier_iff] at hx12 ⊢
+ let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
+ suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
+ · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
+ clear x1 x2 hx12
+ intro x1 x2 hx12
+ induction' x1 using Localization.induction_on with data_x1
+ induction' x2 using Localization.induction_on with data_x2
+ rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
+ rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
+ simp only [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
+ simp only [Localization.mk_mul, one_mul] at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ rw [Submonoid.coe_one, one_mul] at eq1
+ change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
+ rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
+ rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
+ rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
+ · left;
+ simp only [show (mk a1 ⟨f ^ n1, _⟩ : away f) = mk a1 1 * mk 1 ⟨f ^ n1, ⟨n1, rfl⟩⟩ by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
+ · right;
+ simp only [show (mk a2 ⟨f ^ n2, _⟩ : away f) = mk a2 1 * mk 1 ⟨f ^ n2, ⟨n2, rfl⟩⟩ by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
+ · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem N rid1))
+ · exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem M rid2))
+ · rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
+ refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun
/-
@@ -285,41 +284,41 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
toFun 𝒜 f ⁻¹'
(@PrimeSpectrum.basicOpen (A⁰_ f) _ (Quotient.mk'' ⟨k, ⟨a, a_mem⟩, ⟨b, b_mem1⟩, b_mem2⟩) :
Set (PrimeSpectrum (HomogeneousLocalization.Away 𝒜 f))) =
- { x | x.1 ∈ (pbo f) ⊓ pbo a } :=
+ {x | x.1 ∈ (pbo f) ⊓ pbo a} :=
by
classical
- ext1 y
- constructor <;> intro hy
- · refine' ⟨y.2, _⟩
- rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
- rw [ProjectiveSpectrum.mem_coe_basicOpen]
- intro a_mem_y
- apply hy
- rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
- dsimp; rcases b_mem2 with ⟨k, hk⟩
- simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
- rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
- exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
- · change y.1 ∈ _ at hy
- rcases hy with ⟨hy1, hy2⟩
- rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
- rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
- intro rid; dsimp at rid
- rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
- rw [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
- rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
- rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- simp only [Subtype.coe_mk] at eq1
- rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
- rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
- · exact hy2 H1
- · exact y.2 (y.1.IsPrime.mem_of_pow_mem N H2)
- · exact y.2 (y.1.IsPrime.mem_of_pow_mem M H3)
- · rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
- refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
+ ext1 y
+ constructor <;> intro hy
+ · refine' ⟨y.2, _⟩
+ rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
+ rw [ProjectiveSpectrum.mem_coe_basicOpen]
+ intro a_mem_y
+ apply hy
+ rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
+ dsimp; rcases b_mem2 with ⟨k, hk⟩
+ simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
+ rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
+ exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
+ · change y.1 ∈ _ at hy
+ rcases hy with ⟨hy1, hy2⟩
+ rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
+ rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
+ intro rid; dsimp at rid
+ rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
+ rw [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
+ rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
+ rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
+ rw [Submonoid.coe_one, one_mul] at eq1
+ simp only [Subtype.coe_mk] at eq1
+ rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
+ rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
+ · exact hy2 H1
+ · exact y.2 (y.1.IsPrime.mem_of_pow_mem N H2)
+ · exact y.2 (y.1.IsPrime.mem_of_pow_mem M H3)
+ · rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
+ refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
end ToSpec
@@ -378,7 +377,7 @@ The set `{a | aᵢᵐ/fⁱ ∈ q}`
* is relevant, as proved in `carrier.relevant`.
-/
def carrier (q : Spec.T A⁰_ f) : Set A :=
- { a |
+ {a |
∀ i,
(Quotient.mk''
⟨m * i,
@@ -391,7 +390,7 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
mem_tac⟩,
⟨_, rfl⟩⟩ :
A⁰_ f) ∈
- q.1 }
+ q.1}
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
@@ -490,7 +489,7 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
run_tac
mem_tac;
rw [← add_smul]; congr; zify [le_of_not_lt h2, le_of_not_le h1]; abel
- convert_to(∑ i in range (m + m + 1), g i) ∈ q.1; swap
+ convert_to (∑ i in range (m + m + 1), g i) ∈ q.1; swap
· refine' q.1.sum_mem fun j hj => nsmul_mem _ _; split_ifs
exacts [q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
rw [ext_iff_val, val_mk']
@@ -527,14 +526,16 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
· rintro n ⟨a, ha⟩ i
simp_rw [Subtype.coe_mk, proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
split_ifs
- · convert_to(Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, _⟩, ⟨n, rfl⟩⟩ *
+ · convert_to
+ (Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, _⟩, ⟨n, rfl⟩⟩ *
Quotient.mk''
⟨_,
⟨proj 𝒜 (i - n) x ^ m, by
run_tac
mem_tac⟩,
⟨_, _⟩, ⟨i - n, rfl⟩⟩ :
- A⁰_ f) ∈ q.1
+ A⁰_ f) ∈
+ q.1
· erw [ext_iff_val, val_mk', mul_val, val_mk', val_mk', Subtype.coe_mk]
simp_rw [mul_pow, Subtype.coe_mk]; rw [Localization.mk_mul]
congr; erw [← pow_add, Nat.add_sub_of_le h]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -166,16 +166,16 @@ theorem mem_carrier_iff (z : A⁰_ f) :
theorem MemCarrier.clear_denominator' [DecidableEq (Away f)] {z : Localization.Away f}
(hz : z ∈ span (algebraMap A (Away f) '' x.val.asHomogeneousIdeal)) :
- ∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f)(N : ℕ)(acd :
+ ∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f) (N : ℕ) (acd :
∀ y ∈ c.support.image c, A),
f ^ N • z =
algebraMap A (Away f)
(∑ i in c.support.attach,
acd (c i) (Finset.mem_image.mpr ⟨i, ⟨i.2, rfl⟩⟩) * i.1.2.some) :=
by
- rw [← submodule_span_eq, Finsupp.span_eq_range_total, LinearMap.mem_range] at hz
+ rw [← submodule_span_eq, Finsupp.span_eq_range_total, LinearMap.mem_range] at hz
rcases hz with ⟨c, eq1⟩
- rw [Finsupp.total_apply, Finsupp.sum] at eq1
+ rw [Finsupp.total_apply, Finsupp.sum] at eq1
obtain ⟨⟨_, N, rfl⟩, hN⟩ :=
IsLocalization.exist_integer_multiples_of_finset (Submonoid.powers f) (c.support.image c)
choose acd hacd using hN
@@ -188,7 +188,7 @@ theorem MemCarrier.clear_denominator' [DecidableEq (Away f)] {z : Localization.A
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier.clear_denominator' AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator'
theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz : z ∈ carrier 𝒜 x) :
- ∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f)(N : ℕ)(acd :
+ ∃ (c : algebraMap A (Away f) '' x.1.asHomogeneousIdeal →₀ Away f) (N : ℕ) (acd :
∀ y ∈ c.support.image c, A),
f ^ N • z.val =
algebraMap A (Away f)
@@ -200,13 +200,13 @@ theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz :
theorem disjoint : Disjoint (x.1.asHomogeneousIdeal.toIdeal : Set A) (Submonoid.powers f : Set A) :=
by
by_contra rid
- rw [Set.not_disjoint_iff] at rid
+ rw [Set.not_disjoint_iff] at rid
choose g hg using rid
obtain ⟨hg1, ⟨k, rfl⟩⟩ := hg
by_cases k_ineq : 0 < k
- · erw [x.1.IsPrime.pow_mem_iff_mem _ k_ineq] at hg1
+ · erw [x.1.IsPrime.pow_mem_iff_mem _ k_ineq] at hg1
exact x.2 hg1
- · erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1
+ · erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1
apply x.1.IsPrime.1
exact hg1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.disjoint AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.disjoint
@@ -218,12 +218,12 @@ theorem carrier_ne_top : carrier 𝒜 x ≠ ⊤ :=
contrapose! eq_top
obtain ⟨c, N, acd, eq1⟩ :=
mem_carrier.clear_denominator _ x ((Ideal.eq_top_iff_one _).mp eq_top)
- rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
- change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ rw [Algebra.smul_def, HomogeneousLocalization.one_val, mul_one] at eq1
+ change Localization.mk (f ^ N) 1 = mk (∑ _, _) 1 at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- erw [one_mul, one_mul] at eq1
- change f ^ _ * f ^ _ = f ^ _ * _ at eq1
+ erw [one_mul, one_mul] at eq1
+ change f ^ _ * f ^ _ = f ^ _ * _ at eq1
rw [Set.not_disjoint_iff_nonempty_inter]
refine'
⟨f ^ M * f ^ N, eq1.symm ▸ mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _),
@@ -240,23 +240,23 @@ variable (f)
def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
⟨carrier 𝒜 x, carrier_ne_top x, fun x1 x2 hx12 => by
classical
- simp only [mem_carrier_iff] at hx12⊢
+ simp only [mem_carrier_iff] at hx12 ⊢
let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12; exact h x1.val x2.val hx12
+ · rw [HomogeneousLocalization.mul_val] at hx12 ; exact h x1.val x2.val hx12
clear x1 x2 hx12
intro x1 x2 hx12
induction' x1 using Localization.induction_on with data_x1
induction' x2 using Localization.induction_on with data_x2
rcases data_x1, data_x2 with ⟨⟨a1, _, ⟨n1, rfl⟩⟩, ⟨a2, _, ⟨n2, rfl⟩⟩⟩
rcases mem_carrier.clear_denominator' x hx12 with ⟨c, N, acd, eq1⟩
- simp only [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
- simp only [Localization.mk_mul, one_mul] at eq1
- simp only [mk_eq_mk', IsLocalization.eq] at eq1
+ simp only [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * (mk _ _ * mk _ _) = mk (∑ _, _) _ at eq1
+ simp only [Localization.mk_mul, one_mul] at eq1
+ simp only [mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
+ rw [Submonoid.coe_one, one_mul] at eq1
+ change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
@@ -291,27 +291,27 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
ext1 y
constructor <;> intro hy
· refine' ⟨y.2, _⟩
- rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
+ rw [Set.mem_preimage, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen] at hy
rw [ProjectiveSpectrum.mem_coe_basicOpen]
intro a_mem_y
apply hy
rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
dsimp; rcases b_mem2 with ⟨k, hk⟩
simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
- rw [mk_mul, one_mul, mul_one]; congr ; rw [hk]]
+ rw [mk_mul, one_mul, mul_one]; congr; rw [hk]]
exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
- · change y.1 ∈ _ at hy
+ · change y.1 ∈ _ at hy
rcases hy with ⟨hy1, hy2⟩
- rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
+ rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
- intro rid; dsimp at rid
+ intro rid; dsimp at rid
rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
- rw [Algebra.smul_def] at eq1
- change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
- rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
+ rw [Algebra.smul_def] at eq1
+ change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
+ rw [mk_mul, one_mul, mk_eq_mk', IsLocalization.eq] at eq1
rcases eq1 with ⟨⟨_, ⟨M, rfl⟩⟩, eq1⟩
- rw [Submonoid.coe_one, one_mul] at eq1
- simp only [Subtype.coe_mk] at eq1
+ rw [Submonoid.coe_one, one_mul] at eq1
+ simp only [Subtype.coe_mk] at eq1
rcases y.1.IsPrime.mem_or_mem (show a * f ^ N * f ^ M ∈ _ from _) with (H1 | H3)
rcases y.1.IsPrime.mem_or_mem H1 with (H1 | H2)
· exact hy2 H1
@@ -423,7 +423,7 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
(by
constructor <;> intro h i <;> specialize h i
· rw [Set.mem_image]; refine' ⟨_, h, rfl⟩
- · rw [Set.mem_image] at h; rcases h with ⟨x, h, hx⟩
+ · rw [Set.mem_image] at h ; rcases h with ⟨x, h, hx⟩
convert h; rw [ext_iff_val, val_mk']; dsimp only [Subtype.coe_mk]; rw [← hx]; rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
@@ -489,10 +489,10 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
· rw [(_ : m * i = _)];
run_tac
mem_tac;
- rw [← add_smul]; congr ; zify [le_of_not_lt h2, le_of_not_le h1] ; abel
+ rw [← add_smul]; congr; zify [le_of_not_lt h2, le_of_not_le h1]; abel
convert_to(∑ i in range (m + m + 1), g i) ∈ q.1; swap
· refine' q.1.sum_mem fun j hj => nsmul_mem _ _; split_ifs
- exacts[q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
+ exacts [q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
rw [ext_iff_val, val_mk']
change _ = (algebraMap (HomogeneousLocalization.Away 𝒜 f) (Localization.Away f)) _
dsimp only [Subtype.coe_mk]; rw [map_sum, mk_sum]
@@ -537,7 +537,7 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
A⁰_ f) ∈ q.1
· erw [ext_iff_val, val_mk', mul_val, val_mk', val_mk', Subtype.coe_mk]
simp_rw [mul_pow, Subtype.coe_mk]; rw [Localization.mk_mul]
- congr ; erw [← pow_add, Nat.add_sub_of_le h]
+ congr; erw [← pow_add, Nat.add_sub_of_le h]
· exact Ideal.mul_mem_left _ _ (hx _); rw [smul_eq_mul, mul_comm];
run_tac
mem_tac
@@ -600,7 +600,10 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
intro n hn; convert q.1.zero_mem using 1
rw [ext_iff_val, val_mk', zero_val]; simp_rw [proj_apply, Subtype.coe_mk]
convert mk_zero _; rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
- · first |exact hnx|exact hny
+ ·
+ first
+ | exact hnx
+ | exact hny
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.prime AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.prime
variable (f_deg)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -78,7 +78,7 @@ noncomputable section
namespace AlgebraicGeometry
-open DirectSum BigOperators Pointwise BigOperators
+open scoped DirectSum BigOperators Pointwise BigOperators
open DirectSum SetLike.GradedMonoid Localization
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -243,8 +243,7 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
simp only [mem_carrier_iff] at hx12⊢
let J := span (⇑(algebraMap A (away f)) '' x.val.as_homogeneous_ideal)
suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12
- exact h x1.val x2.val hx12
+ · rw [HomogeneousLocalization.mul_val] at hx12; exact h x1.val x2.val hx12
clear x1 x2 hx12
intro x1 x2 hx12
induction' x1 using Localization.induction_on with data_x1
@@ -261,11 +260,11 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
rcases x.1.IsPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from _) with (h1 | rid2)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | rid1)
rcases x.1.IsPrime.mem_or_mem h1 with (h1 | h2)
- · left
+ · left;
simp only [show (mk a1 ⟨f ^ n1, _⟩ : away f) = mk a1 1 * mk 1 ⟨f ^ n1, ⟨n1, rfl⟩⟩ by
rw [Localization.mk_mul, mul_one, one_mul]]
exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
- · right
+ · right;
simp only [show (mk a2 ⟨f ^ n2, _⟩ : away f) = mk a2 1 * mk 1 ⟨f ^ n2, ⟨n2, rfl⟩⟩ by
rw [Localization.mk_mul, mul_one, one_mul]]
exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
@@ -273,8 +272,7 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
· exact False.elim (x.2 (x.1.IsPrime.mem_of_pow_mem M rid2))
· rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂
- exact (Classical.choose_spec h₂).1⟩
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.to_fun AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.toFun
/-
@@ -298,20 +296,15 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
intro a_mem_y
apply hy
rw [to_fun, mem_carrier_iff, HomogeneousLocalization.val_mk'', Subtype.coe_mk]
- dsimp
- rcases b_mem2 with ⟨k, hk⟩
- simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1
- by
- rw [mk_mul, one_mul, mul_one]
- congr
- rw [hk]]
+ dsimp; rcases b_mem2 with ⟨k, hk⟩
+ simp only [show (mk a ⟨b, ⟨k, hk⟩⟩ : away f) = mk 1 ⟨f ^ k, ⟨_, rfl⟩⟩ * mk a 1 by
+ rw [mk_mul, one_mul, mul_one]; congr ; rw [hk]]
exact Ideal.mul_mem_left _ _ (Ideal.subset_span ⟨_, a_mem_y, rfl⟩)
· change y.1 ∈ _ at hy
rcases hy with ⟨hy1, hy2⟩
rw [ProjectiveSpectrum.mem_coe_basicOpen] at hy1 hy2
rw [Set.mem_preimage, to_fun, SetLike.mem_coe, PrimeSpectrum.mem_basicOpen]
- intro rid
- dsimp at rid
+ intro rid; dsimp at rid
rcases mem_carrier.clear_denominator 𝒜 _ rid with ⟨c, N, acd, eq1⟩
rw [Algebra.smul_def] at eq1
change Localization.mk (f ^ N) 1 * mk _ _ = mk (∑ _, _) _ at eq1
@@ -326,8 +319,7 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
· exact y.2 (y.1.IsPrime.mem_of_pow_mem M H3)
· rw [mul_comm _ (f ^ N), mul_comm _ (f ^ M), eq1]
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i hi => mul_mem_left _ _ _))
- generalize_proofs h₁ h₂
- exact (Classical.choose_spec h₂).1
+ generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
end ToSpec
@@ -430,15 +422,9 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
(mem_carrier_iff f_deg q a).trans
(by
constructor <;> intro h i <;> specialize h i
- · rw [Set.mem_image]
- refine' ⟨_, h, rfl⟩
- · rw [Set.mem_image] at h
- rcases h with ⟨x, h, hx⟩
- convert h
- rw [ext_iff_val, val_mk']
- dsimp only [Subtype.coe_mk]
- rw [← hx]
- rfl)
+ · rw [Set.mem_image]; refine' ⟨_, h, rfl⟩
+ · rw [Set.mem_image] at h; rcases h with ⟨x, h, hx⟩
+ convert h; rw [ext_iff_val, val_mk']; dsimp only [Subtype.coe_mk]; rw [← hx]; rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
@@ -496,21 +482,16 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
mem_tac⟩,
⟨i, rfl⟩⟩
rotate_left
- · rw [(_ : m * i = _)]
+ · rw [(_ : m * i = _)];
run_tac
- mem_tac
- rw [← add_smul, Nat.add_sub_of_le h1]
- rfl
- · rw [(_ : m * i = _)]
+ mem_tac;
+ rw [← add_smul, Nat.add_sub_of_le h1]; rfl
+ · rw [(_ : m * i = _)];
run_tac
- mem_tac
- rw [← add_smul]
- congr
- zify [le_of_not_lt h2, le_of_not_le h1]
- abel
+ mem_tac;
+ rw [← add_smul]; congr ; zify [le_of_not_lt h2, le_of_not_le h1] ; abel
convert_to(∑ i in range (m + m + 1), g i) ∈ q.1; swap
- · refine' q.1.sum_mem fun j hj => nsmul_mem _ _
- split_ifs
+ · refine' q.1.sum_mem fun j hj => nsmul_mem _ _; split_ifs
exacts[q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
rw [ext_iff_val, val_mk']
change _ = (algebraMap (HomogeneousLocalization.Away 𝒜 f) (Localization.Away f)) _
@@ -521,12 +502,8 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
split_ifs with h2 h1
· exact ((Finset.mem_range.1 hj).not_le h2).elim
all_goals simp only [mul_val, zero_val, val_mk', Subtype.coe_mk, mk_mul, ← smul_mk]; congr 2
- · rw [mul_assoc, ← pow_add, add_comm (m - j), Nat.add_sub_assoc h1];
- · simp_rw [pow_add]
- rfl
- · rw [← mul_assoc, ← pow_add, Nat.add_sub_of_le (le_of_not_le h1)];
- · simp_rw [pow_add]
- rfl
+ · rw [mul_assoc, ← pow_add, add_comm (m - j), Nat.add_sub_assoc h1]; · simp_rw [pow_add]; rfl
+ · rw [← mul_assoc, ← pow_add, Nat.add_sub_of_le (le_of_not_le h1)]; · simp_rw [pow_add]; rfl
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.add_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.add_mem
variable (hm : 0 < m) (q : Spec.T A⁰_ f)
@@ -546,8 +523,7 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
by
revert c
refine' DirectSum.Decomposition.inductionOn 𝒜 _ _ _
- · rw [zero_smul]
- exact carrier.zero_mem f_deg hm _
+ · rw [zero_smul]; exact carrier.zero_mem f_deg hm _
· rintro n ⟨a, ha⟩ i
simp_rw [Subtype.coe_mk, proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
split_ifs
@@ -560,19 +536,13 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
⟨_, _⟩, ⟨i - n, rfl⟩⟩ :
A⁰_ f) ∈ q.1
· erw [ext_iff_val, val_mk', mul_val, val_mk', val_mk', Subtype.coe_mk]
- simp_rw [mul_pow, Subtype.coe_mk]
- rw [Localization.mk_mul]
- congr
- erw [← pow_add, Nat.add_sub_of_le h]
- · exact Ideal.mul_mem_left _ _ (hx _)
- rw [smul_eq_mul, mul_comm]
+ simp_rw [mul_pow, Subtype.coe_mk]; rw [Localization.mk_mul]
+ congr ; erw [← pow_add, Nat.add_sub_of_le h]
+ · exact Ideal.mul_mem_left _ _ (hx _); rw [smul_eq_mul, mul_comm];
run_tac
mem_tac
- · simp_rw [zero_pow hm]
- convert carrier.zero_mem f_deg hm q i
- rw [map_zero, zero_pow hm]
- · simp_rw [add_smul]
- exact fun _ _ => carrier.add_mem f_deg q
+ · simp_rw [zero_pow hm]; convert carrier.zero_mem f_deg hm q i; rw [map_zero, zero_pow hm]
+ · simp_rw [add_smul]; exact fun _ _ => carrier.add_mem f_deg q
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.smul_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem
/-- For a prime ideal `q` in `A⁰_f`, the set `{a | aᵢᵐ/fⁱ ∈ q}` as an ideal.
@@ -622,8 +592,7 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
show (∀ i, _ ∈ _) ∨ ∀ i, _ ∈ _
by
rw [← and_forall_ne nx, and_iff_left, ← and_forall_ne ny, and_iff_left]
- · apply q.2.mem_or_mem
- convert hxy (nx + ny) using 1
+ · apply q.2.mem_or_mem; convert hxy (nx + ny) using 1
simp_rw [proj_apply, decompose_of_mem_same 𝒜 hnx, decompose_of_mem_same 𝒜 hny,
decompose_of_mem_same 𝒜 (mul_mem hnx hny), mul_pow, pow_add]
simpa only [ext_iff_val, val_mk', mul_val, mk_mul]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -368,7 +368,6 @@ variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m)
private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
-#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_tac algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_tac
include f_deg
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1624094475.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1492521391.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/3cacc945118c8c637d89950af01da78307f59325
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.2197349699.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/1f4705ccdfe1e557fc54a0ce081a05e33d2e6240
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.4090330619.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -509,7 +509,7 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
congr
zify [le_of_not_lt h2, le_of_not_le h1]
abel
- convert_to (∑ i in range (m + m + 1), g i) ∈ q.1; swap
+ convert_to(∑ i in range (m + m + 1), g i) ∈ q.1; swap
· refine' q.1.sum_mem fun j hj => nsmul_mem _ _
split_ifs
exacts[q.1.zero_mem, q.1.mul_mem_left _ (hb i), q.1.mul_mem_right _ (ha i)]
@@ -552,16 +552,14 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
· rintro n ⟨a, ha⟩ i
simp_rw [Subtype.coe_mk, proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
split_ifs
- · convert_to
- (Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, _⟩, ⟨n, rfl⟩⟩ *
+ · convert_to(Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, _⟩, ⟨n, rfl⟩⟩ *
Quotient.mk''
⟨_,
⟨proj 𝒜 (i - n) x ^ m, by
run_tac
mem_tac⟩,
⟨_, _⟩, ⟨i - n, rfl⟩⟩ :
- A⁰_ f) ∈
- q.1
+ A⁰_ f) ∈ q.1
· erw [ext_iff_val, val_mk', mul_val, val_mk', val_mk', Subtype.coe_mk]
simp_rw [mul_pow, Subtype.coe_mk]
rw [Localization.mk_mul]
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a313d8bba1bad05faba71a4a4e9742ab5bd9efd
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1705891745.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -363,8 +363,8 @@ open _Root_.HomogeneousLocalization
variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m)
-/- ./././Mathport/Syntax/Translate/Expr.lean:334:4: warning: unsupported (TODO): `[tacs] -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:334:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:330:4: warning: unsupported (TODO): `[tacs] -/
+/- ./././Mathport/Syntax/Translate/Expr.lean:330:4: warning: unsupported (TODO): `[tacs] -/
private unsafe def mem_tac : tactic Unit :=
let b : tactic Unit := sorry
b <|> sorry
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:69:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.1627101143.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/3ade05ac9447ae31a22d2ea5423435e054131240
@@ -372,8 +372,8 @@ private unsafe def mem_tac : tactic Unit :=
include f_deg
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
/-- The function from `Spec A⁰_f` to `Proj|D(f)` is defined by `q ↦ {a | aᵢᵐ/fⁱ ∈ q}`, i.e. sending
`q` a prime ideal in `A⁰_f` to the homogeneous prime relevant ideal containing only and all the
elements `a : A` such that for every `i`, the degree 0 element formed by dividing the `m`-th power
@@ -403,8 +403,8 @@ def carrier (q : Spec.T A⁰_ f) : Set A :=
q.1 }
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
theorem mem_carrier_iff (q : Spec.T A⁰_ f) (a : A) :
a ∈ carrier f_deg q ↔
∀ i,
@@ -442,14 +442,14 @@ theorem mem_carrier_iff' (q : Spec.T A⁰_ f) (a : A) :
rfl)
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.mem_carrier_iff' AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.mem_carrier_iff'
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg q)
(hb : b ∈ carrier f_deg q) : a + b ∈ carrier f_deg q :=
by
@@ -541,8 +541,8 @@ theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i =>
convert Localization.mk_zero _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.2341749097.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:72:18: unsupported non-interactive tactic _private.3982521519.mem_tac -/
theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ carrier f_deg q :=
by
revert c
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -295,21 +295,21 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
rw [Submonoid.coe_one, one_mul] at eq1
change f ^ _ * (_ * _) = f ^ _ * (f ^ _ * f ^ _ * _) at eq1
have that : a1 * a2 * f ^ N * f ^ M ∈ x.val.asHomogeneousIdeal.toIdeal := ?_
- rcases x.1.isPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from that) with (h1 | rid2)
- rcases x.1.isPrime.mem_or_mem h1 with (h1 | rid1)
- rcases x.1.isPrime.mem_or_mem h1 with (h1 | h2)
- · left;
- simp only [show (Localization.mk a1 ⟨f ^ n1, _⟩ : Away f) =
- Localization.mk a1 1 * Localization.mk 1 (⟨f ^ n1, ⟨n1, rfl⟩⟩ : Submonoid.powers f) by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
- · right;
- simp only [show (mk a2 ⟨f ^ n2, _⟩ : Away f) =
- mk a2 1 * Localization.mk 1 (⟨f ^ n2, ⟨n2, rfl⟩⟩ : Submonoid.powers f) by
- rw [Localization.mk_mul, mul_one, one_mul]]
- exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
- · exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem N rid1))
- · exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem M rid2))
+ · rcases x.1.isPrime.mem_or_mem (show a1 * a2 * f ^ N * f ^ M ∈ _ from that) with (h1 | rid2)
+ · rcases x.1.isPrime.mem_or_mem h1 with (h1 | rid1)
+ · rcases x.1.isPrime.mem_or_mem h1 with (h1 | h2)
+ · left;
+ simp only [show (Localization.mk a1 ⟨f ^ n1, _⟩ : Away f) =
+ Localization.mk a1 1 * Localization.mk 1 (⟨f ^ n1, ⟨n1, rfl⟩⟩ : Submonoid.powers f) by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h1, rfl⟩)
+ · right;
+ simp only [show (mk a2 ⟨f ^ n2, _⟩ : Away f) =
+ mk a2 1 * Localization.mk 1 (⟨f ^ n2, ⟨n2, rfl⟩⟩ : Submonoid.powers f) by
+ rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_right _ _ (Ideal.subset_span ⟨_, h2, rfl⟩)
+ · exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem N rid1))
+ · exact False.elim (x.2 (x.1.isPrime.mem_of_pow_mem M rid2))
· rw [← mul_comm (f ^ M), ← mul_comm (f ^ N), eq1]
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1⟩
@@ -358,9 +358,9 @@ theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈
refine' mul_mem_left _ _ (mul_mem_left _ _ (sum_mem _ fun i _ => mul_mem_left _ _ _))
generalize_proofs h₁ h₂; exact (Classical.choose_spec h₂).1
rcases y.1.isPrime.mem_or_mem this with (H1 | H3)
- rcases y.1.isPrime.mem_or_mem H1 with (H1 | H2)
- · exact hy2 H1
- · exact y.2 (y.1.isPrime.mem_of_pow_mem N H2)
+ · rcases y.1.isPrime.mem_or_mem H1 with (H1 | H2)
+ · exact hy2 H1
+ · exact y.2 (y.1.isPrime.mem_of_pow_mem N H2)
· exact y.2 (y.1.isPrime.mem_of_pow_mem M H3)
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.preimage_eq AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.preimage_eq
@@ -524,18 +524,22 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
let product : A⁰_ f :=
Mul.mul (Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, ?_⟩, ⟨n, rfl⟩⟩ : A⁰_ f)
(Quotient.mk'' ⟨_, ⟨proj 𝒜 (i - n) x ^ m, by mem_tac⟩, ⟨_, ?_⟩, ⟨i - n, rfl⟩⟩ : A⁰_ f)
- split_ifs with h
- · convert_to product ∈ q.1
- · dsimp [product]
- erw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
- HomogeneousLocalization.mul_val, HomogeneousLocalization.val_mk'',
- HomogeneousLocalization.val_mk'']
- simp_rw [mul_pow]; rw [Localization.mk_mul]
- congr; erw [← pow_add, Nat.add_sub_of_le h]
- · rw [(_ : m • n = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
- · rw [(_ : m • (i - n) = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
- · apply Ideal.mul_mem_left (α := A⁰_ f) _ _ (hx _)
- · simpa only [map_zero, zero_pow hm.ne'] using zero_mem f_deg hm q i
+ · split_ifs with h
+ · convert_to product ∈ q.1
+ · dsimp [product]
+ erw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.mul_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.val_mk'']
+ · simp_rw [mul_pow]; rw [Localization.mk_mul]
+ · congr; erw [← pow_add, Nat.add_sub_of_le h]
+ · rw [(_ : m • n = _)]
+ · mem_tac
+ · simp only [smul_eq_mul, mul_comm]
+ · rw [(_ : m • (i - n) = _)]
+ · mem_tac
+ · simp only [smul_eq_mul, mul_comm]
+ · apply Ideal.mul_mem_left (α := A⁰_ f) _ _ (hx _)
+ · simpa only [map_zero, zero_pow hm.ne'] using zero_mem f_deg hm q i
· simp_rw [add_smul]; exact fun _ _ => carrier.add_mem f_deg q
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.smul_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -407,7 +407,7 @@ variable {𝒜} {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m)
open Lean Meta Elab Tactic
macro "mem_tac_aux" : tactic =>
- `(tactic| first | exact pow_mem_graded _ (Submodule.coe_mem _) | exact nat_cast_mem_graded _ _ |
+ `(tactic| first | exact pow_mem_graded _ (Submodule.coe_mem _) | exact natCast_mem_graded _ _ |
exact pow_mem_graded _ f_deg)
macro "mem_tac" : tactic =>
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -737,8 +737,8 @@ lemma image_basicOpen_eq_basicOpen (a : A) (i : ℕ) :
end toSpec
variable {𝒜} in
-/-- The continuous function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where
-`m` is the degree of `f`.-/
+/-- The continuous function `Spec A⁰_f → Proj|D(f)` sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where
+`m` is the degree of `f` -/
def fromSpec {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
(Spec.T (A⁰_ f)) ⟶ (Proj.T| (pbo f)) where
toFun := FromSpec.toFun f_deg hm
Also do the same for "/-A". This is a purely aesthetic change (and exhaustive).
@@ -737,7 +737,7 @@ lemma image_basicOpen_eq_basicOpen (a : A) (i : ℕ) :
end toSpec
variable {𝒜} in
-/--The continuous function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where
+/-- The continuous function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where
`m` is the degree of `f`.-/
def fromSpec {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
(Spec.T (A⁰_ f)) ⟶ (Proj.T| (pbo f)) where
@@ -103,32 +103,32 @@ open ProjectiveSpectrum.StructureSheaf
-- Porting note: currently require lack of hygiene to use in variable declarations
-- maybe all make into notation3?
set_option hygiene false
--- `Proj` as a locally ringed space
+/-- `Proj` as a locally ringed space -/
local notation3 "Proj" => Proj.toLocallyRingedSpace 𝒜
--- the underlying topological space of `Proj`
+/-- The underlying topological space of `Proj` -/
local notation3 "Proj.T" => PresheafedSpace.carrier <| SheafedSpace.toPresheafedSpace
<| LocallyRingedSpace.toSheafedSpace <| Proj.toLocallyRingedSpace 𝒜
--- `Proj` restrict to some open set
+/-- `Proj` restrict to some open set -/
macro "Proj| " U:term : term =>
`((Proj.toLocallyRingedSpace 𝒜).restrict (Opens.openEmbedding (X := Proj.T) ($U : Opens Proj.T)))
--- the underlying topological space of `Proj` restricted to some open set
+/-- the underlying topological space of `Proj` restricted to some open set -/
local notation "Proj.T| " U => PresheafedSpace.carrier <| SheafedSpace.toPresheafedSpace
<| LocallyRingedSpace.toSheafedSpace
<| (LocallyRingedSpace.restrict Proj (Opens.openEmbedding (X := Proj.T) (U : Opens Proj.T)))
--- basic open sets in `Proj`
+/-- basic open sets in `Proj` -/
local notation "pbo " x => ProjectiveSpectrum.basicOpen 𝒜 x
--- basic open sets in `Spec`
+/-- basic open sets in `Spec` -/
local notation "sbo " f => PrimeSpectrum.basicOpen f
--- `Spec` as a locally ringed space
+/-- `Spec` as a locally ringed space -/
local notation3 "Spec " ring => Spec.locallyRingedSpaceObj (CommRingCat.of ring)
--- the underlying topological space of `Spec`
+/-- the underlying topological space of `Spec` -/
local notation "Spec.T " ring =>
(Spec.locallyRingedSpaceObj (CommRingCat.of ring)).toSheafedSpace.toPresheafedSpace.1
@@ -194,10 +194,8 @@ theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz :
MemCarrier.clear_denominator' x <| (mem_carrier_iff x z).mpr hz
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier.clear_denominator AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator
-/--
-For `x : pbo f`
-The ideal `A⁰_f ∩ span {g / 1 | g ∈ x}` is equal to `span {a/f^n | a ∈ x and deg(a) = deg(f^n)}`
--/
+/-- For `x : pbo f`, the ideal `A⁰_f ∩ span {g / 1 | g ∈ x}`
+is equal to `span {a/f^n | a ∈ x and deg(a) = deg(f^n)}`. -/
lemma carrier_eq_span :
carrier x =
Ideal.span { z : HomogeneousLocalization.Away 𝒜 f |
@@ -370,9 +368,8 @@ end ToSpec
section
-/-- The continuous function between the basic open set `D(f)` in `Proj` to the corresponding basic
-open set in `Spec A⁰_f`.
--/
+/-- The continuous function from the basic open set `D(f)` in `Proj`
+to the corresponding basic open set in `Spec A⁰_f`. -/
def toSpec (f : A) : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f where
toFun := ToSpec.toFun f
continuous_toFun := by
@@ -608,8 +605,7 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
· first | exact hnx | exact hny
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.prime AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.prime
-/-- The function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}`.
--/
+/-- The function `Spec A⁰_f → Proj|D(f)` sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}`. -/
def toFun : (Spec.T A⁰_ f) → Proj.T| pbo f := fun q =>
⟨⟨carrier.asHomogeneousIdeal f_deg hm q, carrier.asIdeal.prime f_deg hm q,
carrier.relevant f_deg hm q⟩,
fromSpec
is a continuous function so that we have Spec A^0_f = Proj | D(f)
as topological spaces (#9629)
Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -53,20 +53,26 @@ open sets in `Proj`, more specifically:
* This ideal is prime, the proof can be found in
`ProjIsoSpecTopComponent.FromSpec.carrier.prime`.
Hence we have a well defined function `Spec.T A⁰_f → Proj.T | (pbo f)`, this function is called
- `ProjIsoSpecTopComponent.FromSpec.toFun`. But to prove the continuity of this function,
- we need to prove `fromSpec ∘ toSpec` and `toSpec ∘ fromSpec` are both identities (TBC).
+ `ProjIsoSpecTopComponent.FromSpec.toFun`. But to prove the continuity of this function, we need
+ to prove `fromSpec ∘ toSpec` and `toSpec ∘ fromSpec` are both identities; these are achieved in
+ `ProjIsoSpecTopComponent.fromSpec_toSpec` and `ProjIsoSpecTopComponent.toSpec_fromSpec`.
## Main Definitions and Statements
-* `degreeZeroPart`: the degree zero part of the localized ring `Aₓ` where `x` is a homogeneous
- element of degree `n` is the subring of elements of the form `a/f^m` where `a` has degree `mn`.
-
-For a homogeneous element `f` of degree `n`
-* `ProjIsoSpecTopComponent.toSpec`: `forward f` is the
- continuous map between `Proj.T| pbo f` and `Spec.T A⁰_f`
+For a homogeneous element `f` of degree `m`
+* `ProjIsoSpecTopComponent.toSpec`: the continuous map between `Proj.T| pbo f` and `Spec.T A⁰_f`
+ defined by sending `x : Proj| (pbo f)` to `A⁰_f ∩ span {g / 1 | g ∈ x}`. We also denote this map
+ as `ψ`.
* `ProjIsoSpecTopComponent.ToSpec.preimage_eq`: for any `a: A`, if `a/f^m` has degree zero,
then the preimage of `sbo a/f^m` under `to_Spec f` is `pbo f ∩ pbo a`.
+If we further assume `m` is positive
+* `ProjIsoSpecTopComponent.fromSpec`: the continuous map between `Spec.T A⁰_f` and `Proj.T| pbo f`
+ defined by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where `aᵢ` is the `i`-th coordinate of `a`.
+ We also denote this map as `φ`
+* `projIsoSpecTopComponent`: the homeomorphism `Proj.T| pbo f ≅ Spec.T A⁰_f` obtained by `φ` and
+ `ψ`.
+## Reference
* [Robin Hartshorne, *Algebraic Geometry*][Har77]: Chapter II.2 Proposition 2.5
-/
@@ -364,12 +370,10 @@ end ToSpec
section
-variable {𝒜}
-
/-- The continuous function between the basic open set `D(f)` in `Proj` to the corresponding basic
open set in `Spec A⁰_f`.
-/
-def toSpec {f : A} : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f where
+def toSpec (f : A) : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f where
toFun := ToSpec.toFun f
continuous_toFun := by
rw [PrimeSpectrum.isTopologicalBasis_basic_opens.continuous_iff]
@@ -381,6 +385,15 @@ def toSpec {f : A} : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f where
· intro hz; simpa only [Set.inf_eq_inter,Set.mem_inter_iff,Set.mem_preimage]
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec AlgebraicGeometry.ProjIsoSpecTopComponent.toSpec
+variable {𝒜} in
+lemma toSpec_preimage_eq {f : A} (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈ 𝒜 k)
+ (b_mem2 : b ∈ Submonoid.powers f) :
+ toSpec 𝒜 f ⁻¹'
+ (@PrimeSpectrum.basicOpen (A⁰_ f) _ (Quotient.mk'' ⟨k, ⟨a, a_mem⟩, ⟨b, b_mem1⟩, b_mem2⟩) :
+ Set (PrimeSpectrum (HomogeneousLocalization.Away 𝒜 f))) =
+ {x | x.1 ∈ (pbo f) ⊓ pbo a} :=
+ ToSpec.preimage_eq f a b k a_mem b_mem1 b_mem2
+
end
namespace FromSpec
@@ -607,8 +620,8 @@ end FromSpec
section toSpecFromSpec
-lemma toSpec_fromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Spec.T (A⁰_ f)) :
- toSpec (FromSpec.toFun f_deg hm x) = x := show _ = (_ : PrimeSpectrum _) by
+lemma toSpec_fromSpec {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) (x : Spec.T (A⁰_ f)) :
+ toSpec 𝒜 f (FromSpec.toFun f_deg hm x) = x := show _ = (_ : PrimeSpectrum _) by
ext (z : A⁰_ f); fconstructor <;> intro hz
· change z ∈ ToSpec.carrier _ at hz
erw [ToSpec.carrier_eq_span, mem_span_set] at hz
@@ -664,8 +677,8 @@ end toSpecFromSpec
section fromSpecToSpec
-lemma fromSpec_toSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Proj.T| pbo f) :
- FromSpec.toFun f_deg hm (toSpec x) = x := by
+lemma fromSpec_toSpec {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) (x : Proj.T| pbo f) :
+ FromSpec.toFun f_deg hm (toSpec 𝒜 f x) = x := by
classical
refine Subtype.ext <| ProjectiveSpectrum.ext _ _ <| HomogeneousIdeal.ext <| Ideal.ext fun z ↦ ?_
constructor <;> intro hz
@@ -694,23 +707,81 @@ lemma fromSpec_toSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x :
exact Ideal.mul_mem_right _ _ <|
Ideal.subset_span ⟨_, ⟨Ideal.pow_mem_of_mem _ (x.1.asHomogeneousIdeal.2 i hz) _ hm, rfl⟩⟩
-lemma toSpec_injective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
- Function.Injective (toSpec (𝒜 := 𝒜) (f := f)) := by
+lemma toSpec_injective {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
+ Function.Injective (toSpec 𝒜 f) := by
intro x₁ x₂ h
have := congr_arg (FromSpec.toFun f_deg hm) h
rwa [fromSpec_toSpec, fromSpec_toSpec] at this
-lemma toSpec_surjective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
- Function.Surjective (toSpec (𝒜 := 𝒜) (f := f)) :=
+lemma toSpec_surjective {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
+ Function.Surjective (toSpec 𝒜 f) :=
Function.surjective_iff_hasRightInverse |>.mpr
- ⟨FromSpec.toFun f_deg hm, toSpec_fromSpec 𝒜 hm f_deg⟩
+ ⟨FromSpec.toFun f_deg hm, toSpec_fromSpec 𝒜 f_deg hm⟩
-lemma toSpec_bijective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
+lemma toSpec_bijective {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m):
Function.Bijective (toSpec (𝒜 := 𝒜) (f := f)) :=
- ⟨toSpec_injective 𝒜 hm f_deg, toSpec_surjective 𝒜 hm f_deg⟩
+ ⟨toSpec_injective 𝒜 f_deg hm, toSpec_surjective 𝒜 f_deg hm⟩
end fromSpecToSpec
+namespace toSpec
+
+variable {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m)
+
+variable {𝒜} in
+lemma image_basicOpen_eq_basicOpen (a : A) (i : ℕ) :
+ toSpec 𝒜 f '' {x | x.1 ∈ (pbo f) ⊓ pbo (decompose 𝒜 a i)} =
+ (PrimeSpectrum.basicOpen (R := A⁰_ f) <|
+ Quotient.mk'' ⟨m * i, ⟨decompose 𝒜 a i ^ m, SetLike.pow_mem_graded _ (Submodule.coe_mem _)⟩,
+ ⟨f^i, by rw [mul_comm]; exact SetLike.pow_mem_graded _ f_deg⟩, ⟨i, rfl⟩⟩).1 :=
+ Set.preimage_injective.mpr (toSpec_surjective 𝒜 f_deg hm) <|
+ Set.preimage_image_eq _ (toSpec_injective 𝒜 f_deg hm) ▸ by
+ rw [Opens.carrier_eq_coe, toSpec_preimage_eq, ProjectiveSpectrum.basicOpen_pow 𝒜 _ m hm]
+
+end toSpec
+
+variable {𝒜} in
+/--The continuous function `Spec A⁰_f → Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}` where
+`m` is the degree of `f`.-/
+def fromSpec {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
+ (Spec.T (A⁰_ f)) ⟶ (Proj.T| (pbo f)) where
+ toFun := FromSpec.toFun f_deg hm
+ continuous_toFun := by
+ rw [isTopologicalBasis_subtype (ProjectiveSpectrum.isTopologicalBasis_basic_opens 𝒜) (pbo f).1
+ |>.continuous_iff]
+ rintro s ⟨_, ⟨a, rfl⟩, rfl⟩
+ have h₁ : Subtype.val (p := (pbo f).1) ⁻¹' (pbo a) =
+ ⋃ i : ℕ, {x | x.1 ∈ (pbo f) ⊓ pbo (decompose 𝒜 a i)} := by
+ ext ⟨x, (hx : f ∉ x.asHomogeneousIdeal)⟩
+ rw [ProjectiveSpectrum.basicOpen_eq_union_of_projection 𝒜 a]
+ change (∃ _, _) ↔ (∃ _, _)
+ simp only [GradedAlgebra.proj_apply, Set.mem_range, Set.iUnion_exists, exists_exists_eq_and,
+ Set.mem_iUnion, SetLike.mem_coe, exists_prop, exists_and_right,
+ ProjectiveSpectrum.mem_basicOpen, Opens.carrier_eq_coe, Set.mem_setOf_eq]
+ exact exists_congr fun n ↦ show _ ↔ (_ ∉ _ ∧ _ ∉ _) by tauto
+
+ let e : _ ≃ _ :=
+ ⟨FromSpec.toFun f_deg hm, ToSpec.toFun f, toSpec_fromSpec _ _ _, fromSpec_toSpec _ _ _⟩
+ change IsOpen <| e ⁻¹' _
+ rw [Set.preimage_equiv_eq_image_symm, h₁, Set.image_iUnion]
+ exact isOpen_iUnion fun i ↦ toSpec.image_basicOpen_eq_basicOpen f_deg hm a i ▸
+ PrimeSpectrum.isOpen_basicOpen
+
end ProjIsoSpecTopComponent
+variable {𝒜} in
+/--
+The homeomorphism `Proj|D(f) ≅ Spec A⁰_f` defined by
+- `φ : Proj|D(f) ⟶ Spec A⁰_f` by sending `x` to `A⁰_f ∩ span {g / 1 | g ∈ x}`
+- `ψ : Spec A⁰_f ⟶ Proj|D(f)` by sending `q` to `{a | aᵢᵐ/fⁱ ∈ q}`.
+-/
+def projIsoSpecTopComponent {f : A} {m : ℕ} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
+ (Proj.T| (pbo f)) ≅ (Spec.T (A⁰_ f)) where
+ hom := ProjIsoSpecTopComponent.toSpec 𝒜 f
+ inv := ProjIsoSpecTopComponent.fromSpec f_deg hm
+ hom_inv_id := ConcreteCategory.hom_ext _ _
+ (ProjIsoSpecTopComponent.fromSpec_toSpec 𝒜 f_deg hm)
+ inv_hom_id := ConcreteCategory.hom_ext _ _
+ (ProjIsoSpecTopComponent.toSpec_fromSpec 𝒜 f_deg hm)
+
end AlgebraicGeometry
@@ -657,6 +657,9 @@ lemma toSpec_fromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x :
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
HomogeneousLocalization.zero_val, Localization.mk_zero]
+@[deprecated] -- 2024-03-02
+alias toSpecFromSpec := toSpec_fromSpec
+
end toSpecFromSpec
section fromSpecToSpec
@@ -685,7 +685,7 @@ lemma fromSpec_toSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x :
· intro i
erw [ToSpec.mem_carrier_iff, HomogeneousLocalization.val_mk'']
dsimp only [GradedAlgebra.proj_apply]
- rw [show (mk (decompose 𝒜 z i ^ m) ⟨f^i, ⟨i, rfl⟩⟩: Away f) =
+ rw [show (mk (decompose 𝒜 z i ^ m) ⟨f^i, ⟨i, rfl⟩⟩ : Away f) =
(decompose 𝒜 z i ^ m : A) • (mk 1 ⟨f^i, ⟨i, rfl⟩⟩ : Away f) by
· rw [smul_mk, smul_eq_mul, mul_one], Algebra.smul_def]
exact Ideal.mul_mem_right _ _ <|
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)
@@ -84,11 +84,8 @@ open DirectSum SetLike.GradedMonoid Localization
open Finset hiding mk_zero
variable {R A : Type*}
-
variable [CommRing R] [CommRing A] [Algebra R A]
-
variable (𝒜 : ℕ → Submodule R A)
-
variable [GradedAlgebra 𝒜]
open TopCat TopologicalSpace
I ran tryAtEachStep on all files under Mathlib
to find all locations where omega
succeeds. For each that was a linarith
without an only
, I tried replacing it with omega
, and I verified that elaboration time got smaller. (In almost all cases, there was a noticeable speedup.) I also replaced some slow aesop
s along the way.
@@ -242,7 +242,7 @@ theorem disjoint :
· erw [x.1.isPrime.pow_mem_iff_mem _ k_ineq] at hg1
exact x.2 hg1
· dsimp at hg1
- erw [show k = 0 by linarith, pow_zero, ← Ideal.eq_top_iff_one] at hg1
+ erw [show k = 0 by omega, pow_zero, ← Ideal.eq_top_iff_one] at hg1
apply x.1.isPrime.1
exact hg1
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.disjoint AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.disjoint
@@ -610,7 +610,7 @@ end FromSpec
section toSpecFromSpec
-lemma toSpecFromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Spec.T (A⁰_ f)) :
+lemma toSpec_fromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Spec.T (A⁰_ f)) :
toSpec (FromSpec.toFun f_deg hm x) = x := show _ = (_ : PrimeSpectrum _) by
ext (z : A⁰_ f); fconstructor <;> intro hz
· change z ∈ ToSpec.carrier _ at hz
@@ -662,6 +662,55 @@ lemma toSpecFromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x :
end toSpecFromSpec
+section fromSpecToSpec
+
+lemma fromSpec_toSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Proj.T| pbo f) :
+ FromSpec.toFun f_deg hm (toSpec x) = x := by
+ classical
+ refine Subtype.ext <| ProjectiveSpectrum.ext _ _ <| HomogeneousIdeal.ext <| Ideal.ext fun z ↦ ?_
+ constructor <;> intro hz
+ · rw [← DirectSum.sum_support_decompose 𝒜 z]
+ refine Ideal.sum_mem _ fun i _ ↦ ?_
+ obtain ⟨c, N, acd, eq1⟩ := ToSpec.MemCarrier.clear_denominator x (hz i)
+ rw [HomogeneousLocalization.val_mk'', smul_mk, ← mk_one_eq_algebraMap, mk_eq_mk_iff,
+ r_iff_exists, OneMemClass.coe_one, one_mul] at eq1
+ obtain ⟨⟨_, ⟨k, rfl⟩⟩, eq1⟩ := eq1
+ dsimp at eq1
+ rw [← mul_assoc, ← mul_assoc, ← pow_add, ← pow_add] at eq1
+ suffices mem : f^(k + i) * ∑ i in c.support.attach, acd (c i) _ * _ ∈
+ x.1.asHomogeneousIdeal from
+ x.1.isPrime.mem_of_pow_mem _ <| x.1.isPrime.mem_or_mem (eq1.symm ▸ mem)
+ |>.resolve_left fun r ↦ ProjectiveSpectrum.mem_basicOpen 𝒜 _ _
+ |>.mp x.2 <| x.1.isPrime.mem_of_pow_mem _ r
+ exact Ideal.mul_mem_left _ _ <| Ideal.sum_mem _ fun i _ ↦
+ Ideal.mul_mem_left _ _ i.1.2.choose_spec.1
+
+ · intro i
+ erw [ToSpec.mem_carrier_iff, HomogeneousLocalization.val_mk'']
+ dsimp only [GradedAlgebra.proj_apply]
+ rw [show (mk (decompose 𝒜 z i ^ m) ⟨f^i, ⟨i, rfl⟩⟩: Away f) =
+ (decompose 𝒜 z i ^ m : A) • (mk 1 ⟨f^i, ⟨i, rfl⟩⟩ : Away f) by
+ · rw [smul_mk, smul_eq_mul, mul_one], Algebra.smul_def]
+ exact Ideal.mul_mem_right _ _ <|
+ Ideal.subset_span ⟨_, ⟨Ideal.pow_mem_of_mem _ (x.1.asHomogeneousIdeal.2 i hz) _ hm, rfl⟩⟩
+
+lemma toSpec_injective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
+ Function.Injective (toSpec (𝒜 := 𝒜) (f := f)) := by
+ intro x₁ x₂ h
+ have := congr_arg (FromSpec.toFun f_deg hm) h
+ rwa [fromSpec_toSpec, fromSpec_toSpec] at this
+
+lemma toSpec_surjective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
+ Function.Surjective (toSpec (𝒜 := 𝒜) (f := f)) :=
+ Function.surjective_iff_hasRightInverse |>.mpr
+ ⟨FromSpec.toFun f_deg hm, toSpec_fromSpec 𝒜 hm f_deg⟩
+
+lemma toSpec_bijective {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m):
+ Function.Bijective (toSpec (𝒜 := 𝒜) (f := f)) :=
+ ⟨toSpec_injective 𝒜 hm f_deg, toSpec_surjective 𝒜 hm f_deg⟩
+
+end fromSpecToSpec
+
end ProjIsoSpecTopComponent
end AlgebraicGeometry
@@ -39,7 +39,7 @@ open sets in `Proj`, more specifically:
- forward direction `toSpec`:
for any `x : pbo f`, i.e. a relevant homogeneous prime ideal `x`, send it to
`A⁰_f ∩ span {g / 1 | g ∈ x}` (see `ProjIsoSpecTopComponent.IoSpec.carrier`). This ideal is
- prime, the proof is in `ProjIsoSpecTopcomponent.ToSpec.toFun`. The fact that this function
+ prime, the proof is in `ProjIsoSpecTopComponent.ToSpec.toFun`. The fact that this function
is continuous is found in `ProjIsoSpecTopComponent.toSpec`
- backward direction `fromSpec`:
for any `q : Spec A⁰_f`, we send it to `{a | ∀ i, aᵢᵐ/fⁱ ∈ q}`; we need this to be a
@@ -191,6 +191,47 @@ theorem MemCarrier.clear_denominator [DecidableEq (Away f)] {z : A⁰_ f} (hz :
MemCarrier.clear_denominator' x <| (mem_carrier_iff x z).mpr hz
#align algebraic_geometry.Proj_iso_Spec_Top_component.to_Spec.mem_carrier.clear_denominator AlgebraicGeometry.ProjIsoSpecTopComponent.ToSpec.MemCarrier.clear_denominator
+/--
+For `x : pbo f`
+The ideal `A⁰_f ∩ span {g / 1 | g ∈ x}` is equal to `span {a/f^n | a ∈ x and deg(a) = deg(f^n)}`
+-/
+lemma carrier_eq_span :
+ carrier x =
+ Ideal.span { z : HomogeneousLocalization.Away 𝒜 f |
+ ∃ (s F : A) (_ : s ∈ x.1.asHomogeneousIdeal) (n : ℕ)
+ (s_mem : s ∈ 𝒜 n) (F_mem1 : F ∈ 𝒜 n) (F_mem2 : F ∈ Submonoid.powers f),
+ z = Quotient.mk'' ⟨n, ⟨s, s_mem⟩, ⟨F, F_mem1⟩,F_mem2⟩ } := by
+ classical
+ refine le_antisymm ?_ <| Ideal.span_le.mpr ?_
+ · intro z hz
+ let k : ℕ := z.den_mem.choose
+ have hk : f^k = z.den := z.den_mem.choose_spec
+ suffices mem1 : z.num ∈ x.1.asHomogeneousIdeal by
+ refine Ideal.subset_span ⟨_, _, mem1, _, z.num_mem_deg, z.den_mem_deg, z.den_mem, ?_⟩
+ rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.eq_num_div_den]
+
+ obtain ⟨c, N, acd, eq1⟩ := MemCarrier.clear_denominator x hz
+ rw [z.eq_num_div_den, smul_mk, smul_eq_mul, ← mk_one_eq_algebraMap,
+ Localization.mk_eq_mk_iff, Localization.r_iff_exists] at eq1
+ obtain ⟨⟨_, ⟨l, rfl⟩⟩, eq1⟩ := eq1
+ dsimp only [OneMemClass.coe_one] at eq1
+ rw [one_mul, ← hk, ← mul_assoc, ← mul_assoc, ← pow_add, ← pow_add] at eq1
+
+ suffices f^(l + k) * ∑ i in c.support.attach, acd (c i) _ * i.1.2.choose ∈
+ x.1.asHomogeneousIdeal from
+ (x.1.isPrime.mem_or_mem (eq1.symm ▸ this)).resolve_left fun r ↦
+ (ProjectiveSpectrum.mem_basicOpen 𝒜 _ _).mp x.2 <| x.1.isPrime.mem_of_pow_mem _ r
+ exact Ideal.mul_mem_left _ _ <| Ideal.sum_mem _ (fun ⟨j, hj⟩ _ ↦
+ Ideal.mul_mem_left _ _ j.2.choose_spec.1)
+
+ · rintro _ ⟨s, _, hs, n, s_mem, F_mem, ⟨l, rfl⟩, rfl⟩
+ erw [mem_carrier_iff, HomogeneousLocalization.val_mk'']
+ erw [show (Localization.mk s ⟨f ^ l, ⟨_, rfl⟩⟩ : Localization.Away f) =
+ (Localization.mk 1 ⟨f^l, ⟨_, rfl⟩⟩ : Localization.Away f) * Localization.mk s 1 by
+ · rw [Localization.mk_mul, mul_one, one_mul]]
+ exact Ideal.mul_mem_left _ _ <| Ideal.subset_span ⟨s, hs, rfl⟩
+
theorem disjoint :
Disjoint (x.1.asHomogeneousIdeal.toIdeal : Set A) (Submonoid.powers f : Set A) := by
by_contra rid
@@ -567,6 +608,60 @@ def toFun : (Spec.T A⁰_ f) → Proj.T| pbo f := fun q =>
end FromSpec
+section toSpecFromSpec
+
+lemma toSpecFromSpec {f : A} {m : ℕ} (hm : 0 < m) (f_deg : f ∈ 𝒜 m) (x : Spec.T (A⁰_ f)) :
+ toSpec (FromSpec.toFun f_deg hm x) = x := show _ = (_ : PrimeSpectrum _) by
+ ext (z : A⁰_ f); fconstructor <;> intro hz
+ · change z ∈ ToSpec.carrier _ at hz
+ erw [ToSpec.carrier_eq_span, mem_span_set] at hz
+ obtain ⟨c, support_le, rfl⟩ := hz
+ refine Ideal.sum_mem _ fun j hj ↦ Ideal.mul_mem_left _ _ ?_
+ obtain ⟨s, _, hs, n, s_mem, F_mem, ⟨k, rfl⟩, rfl⟩ := support_le hj
+ refine x.IsPrime.mem_of_pow_mem m <| show Quotient.mk'' ⟨_, ⟨s^m, _⟩, _, _⟩ ∈ x.asIdeal from ?_
+ convert hs n using 1
+ rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.val_mk'']
+ simp only [smul_eq_mul, SetLike.coe_gnpow, GradedAlgebra.proj_apply,
+ DirectSum.decompose_of_mem_same 𝒜 s_mem]
+ by_cases ineq : f^k = 0
+ · have := IsLocalization.uniqueOfZeroMem (M := Submonoid.powers f) (S := Localization.Away f)
+ ⟨k, ineq⟩
+ exact Subsingleton.elim _ _
+ · simp_rw [← pow_mul]; congr
+ exact DirectSum.degree_eq_of_mem_mem 𝒜 F_mem (SetLike.pow_mem_graded k f_deg) ineq |>.symm
+
+ · erw [ToSpec.mem_carrier_iff]
+ obtain ⟨k, (k_spec : f^k = z.den)⟩ := z.den_mem
+ rw [show z.val = (Localization.mk z.num ⟨f^k, ⟨k, rfl⟩⟩ : Away f) by
+ · rw [z.eq_num_div_den]; congr; exact k_spec.symm,
+ show (mk z.num ⟨f^k, ⟨k, rfl⟩⟩ : Away f) = mk z.num 1 * (mk 1 ⟨f^k, ⟨k, rfl⟩⟩ : Away f) by
+ · rw [mk_mul, mul_one, one_mul]]
+ refine Ideal.mul_mem_right _ _ <| Ideal.subset_span ⟨z.num, ?_, rfl⟩
+
+ intro j
+ by_cases ineq : z.deg = j
+ · subst ineq
+ simp only [CommRingCat.coe_of, GradedAlgebra.proj_apply,
+ DirectSum.decompose_of_mem_same 𝒜 z.num_mem_deg]
+ convert x.IsPrime.pow_mem_iff_mem m hm |>.mpr hz using 1
+ rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.pow_val, z.eq_num_div_den, Localization.mk_pow]
+ by_cases ineq : f^k = 0
+ · have := IsLocalization.uniqueOfZeroMem (M := Submonoid.powers f) (S := Localization.Away f)
+ ⟨k, ineq⟩
+ exact Subsingleton.elim _ _
+ · dsimp; congr 2
+ rw [← k_spec, ← pow_mul, show z.deg = k * m from
+ degree_eq_of_mem_mem 𝒜 (k_spec ▸ z.den_mem_deg) (SetLike.pow_mem_graded k f_deg) ineq]
+ · simp only [CommRingCat.coe_of, GradedAlgebra.proj_apply, zero_pow (by linarith only [hm]),
+ DirectSum.decompose_of_mem_ne 𝒜 z.num_mem_deg ineq]
+ convert x.asIdeal.zero_mem
+ rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
+ HomogeneousLocalization.zero_val, Localization.mk_zero]
+
+end toSpecFromSpec
+
end ProjIsoSpecTopComponent
end AlgebraicGeometry
@@ -478,7 +478,7 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
(Quotient.mk'' ⟨_, ⟨proj 𝒜 (i - n) x ^ m, by mem_tac⟩, ⟨_, ?_⟩, ⟨i - n, rfl⟩⟩ : A⁰_ f)
split_ifs with h
· convert_to product ∈ q.1
- · dsimp
+ · dsimp [product]
erw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
HomogeneousLocalization.mul_val, HomogeneousLocalization.val_mk'',
HomogeneousLocalization.val_mk'']
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -236,8 +236,8 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
classical
rw [mem_carrier_iff] at hx12
let J := span ((algebraMap A (Away f) : A → (Away f)) '' x.val.asHomogeneousIdeal)
- suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J
- · rw [HomogeneousLocalization.mul_val] at hx12; exact h x1.val x2.val hx12
+ suffices h : ∀ x y : Localization.Away f, x * y ∈ J → x ∈ J ∨ y ∈ J by
+ rw [HomogeneousLocalization.mul_val] at hx12; exact h x1.val x2.val hx12
clear x1 x2 hx12
intro x1 x2 hx12
induction' x1 using Localization.induction_on with data_x1
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n ≠ 0
.
From LeanAPAP
@@ -462,7 +462,7 @@ variable (hm : 0 < m) (q : Spec.T A⁰_ f)
theorem carrier.zero_mem : (0 : A) ∈ carrier f_deg q := fun i => by
convert Submodule.zero_mem q.1 using 1
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
- HomogeneousLocalization.zero_val]; simp_rw [map_zero, zero_pow hm]
+ HomogeneousLocalization.zero_val]; simp_rw [map_zero, zero_pow hm.ne']
convert Localization.mk_zero (S := Submonoid.powers f) _ using 1
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.zero_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.zero_mem
@@ -487,7 +487,7 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
· rw [(_ : m • n = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
· rw [(_ : m • (i - n) = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
· apply Ideal.mul_mem_left (α := A⁰_ f) _ _ (hx _)
- · simp_rw [zero_pow hm]; convert carrier.zero_mem f_deg hm q i; rw [map_zero, zero_pow hm]
+ · simpa only [map_zero, zero_pow hm.ne'] using zero_mem f_deg hm q i
· simp_rw [add_smul]; exact fun _ _ => carrier.add_mem f_deg q
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.smul_mem AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.smul_mem
@@ -505,9 +505,8 @@ theorem carrier.asIdeal.homogeneous : (carrier.asIdeal f_deg hm q).IsHomogeneous
fun i a ha j =>
(em (i = j)).elim (fun h => h ▸ by simpa only [proj_apply, decompose_coe, of_eq_same] using ha _)
fun h => by
- simp only [proj_apply, decompose_of_mem_ne 𝒜 (Submodule.coe_mem (decompose 𝒜 a i)) h,
- zero_pow hm]
- convert carrier.zero_mem f_deg hm q j; rw [map_zero, zero_pow hm]
+ simpa only [proj_apply, decompose_of_mem_ne 𝒜 (Submodule.coe_mem (decompose 𝒜 a i)) h,
+ zero_pow hm.ne', map_zero] using carrier.zero_mem f_deg hm q j
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.homogeneous AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.homogeneous
/-- For a prime ideal `q` in `A⁰_f`, the set `{a | aᵢᵐ/fⁱ ∈ q}` as a homogeneous ideal.
@@ -554,7 +553,7 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
HomogeneousLocalization.zero_val]; simp_rw [proj_apply]
convert mk_zero (S := Submonoid.powers f) _
- rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
+ rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm.ne']
· first | exact hnx | exact hny
#align algebraic_geometry.Proj_iso_Spec_Top_component.from_Spec.carrier.as_ideal.prime AlgebraicGeometry.ProjIsoSpecTopComponent.FromSpec.carrier.asIdeal.prime
continuous_generateFrom
to an iff
(#9259)
Similarly, upgrade tendsto_nhds_generateFrom
, IsTopologicalBasis.continuous
, Topology.IsLower.continuous_of_Ici
, and Topology.IsUpper.continuous_iff_Iic
.
The old lemmas are now deprecated, and the new ones have _iff
in their names.
Once we remove the old lemmas, we can drop the _iff
suffixes.
@@ -334,7 +334,7 @@ open set in `Spec A⁰_f`.
def toSpec {f : A} : (Proj.T| pbo f) ⟶ Spec.T A⁰_ f where
toFun := ToSpec.toFun f
continuous_toFun := by
- apply IsTopologicalBasis.continuous PrimeSpectrum.isTopologicalBasis_basic_opens
+ rw [PrimeSpectrum.isTopologicalBasis_basic_opens.continuous_iff]
rintro _ ⟨⟨k, ⟨a, ha⟩, ⟨b, hb1⟩, ⟨k', hb2⟩⟩, rfl⟩; dsimp
erw [ToSpec.preimage_eq f a b k ha hb1 ⟨k', hb2⟩]
refine' isOpen_induced_iff.mpr ⟨(pbo f).1 ⊓ (pbo a).1, IsOpen.inter (pbo f).2 (pbo a).2, _⟩
@@ -471,7 +471,7 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
refine' DirectSum.Decomposition.inductionOn 𝒜 _ _ _
· rw [zero_smul]; exact carrier.zero_mem f_deg hm _
· rintro n ⟨a, ha⟩ i
- simp_rw [Subtype.coe_mk, proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
+ simp_rw [proj_apply, smul_eq_mul, coe_decompose_mul_of_left_mem 𝒜 i ha]
-- Porting note: having trouble with Mul instance
let product : A⁰_ f :=
Mul.mul (Quotient.mk'' ⟨_, ⟨a ^ m, pow_mem_graded m ha⟩, ⟨_, ?_⟩, ⟨n, rfl⟩⟩ : A⁰_ f)
@@ -481,8 +481,8 @@ theorem carrier.smul_mem (c x : A) (hx : x ∈ carrier f_deg q) : c • x ∈ ca
· dsimp
erw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
HomogeneousLocalization.mul_val, HomogeneousLocalization.val_mk'',
- HomogeneousLocalization.val_mk'', Subtype.coe_mk]
- simp_rw [mul_pow, Subtype.coe_mk]; rw [Localization.mk_mul]
+ HomogeneousLocalization.val_mk'']
+ simp_rw [mul_pow]; rw [Localization.mk_mul]
congr; erw [← pow_add, Nat.add_sub_of_le h]
· rw [(_ : m • n = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
· rw [(_ : m • (i - n) = _)]; mem_tac; simp only [smul_eq_mul, mul_comm]
@@ -543,7 +543,7 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
rw [← and_forall_ne nx, and_iff_left, ← and_forall_ne ny, and_iff_left]
· apply q.2.mem_or_mem; convert hxy (nx + ny) using 1
dsimp
- simp_rw [proj_apply, decompose_of_mem_same 𝒜 hnx, decompose_of_mem_same 𝒜 hny,
+ simp_rw [decompose_of_mem_same 𝒜 hnx, decompose_of_mem_same 𝒜 hny,
decompose_of_mem_same 𝒜 (SetLike.GradedMonoid.toGradedMul.mul_mem hnx hny),
mul_pow, pow_add]
simp only [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
@@ -552,7 +552,7 @@ theorem carrier.asIdeal.prime : (carrier.asIdeal f_deg hm q).IsPrime :=
all_goals
intro n hn; convert q.1.zero_mem using 1
rw [HomogeneousLocalization.ext_iff_val, HomogeneousLocalization.val_mk'',
- HomogeneousLocalization.zero_val]; simp_rw [proj_apply, Subtype.coe_mk]
+ HomogeneousLocalization.zero_val]; simp_rw [proj_apply]
convert mk_zero (S := Submonoid.powers f) _
rw [decompose_of_mem_ne 𝒜 _ hn.symm, zero_pow hm]
· first | exact hnx | exact hny
@@ -412,21 +412,23 @@ theorem carrier.add_mem (q : Spec.T A⁰_ f) {a b : A} (ha : a ∈ carrier f_deg
let g : ℕ → A⁰_ f := fun j => (m + m).choose j •
if h2 : m + m < j then (0 : A⁰_ f)
else
+ -- Porting note: inlining `l`, `r` causes a "can't synth HMul A⁰_ f A⁰_ f ?" error
if h1 : j ≤ m then
- -- Porting note : cannot use * notation since can't synth HMul A⁰_ f A⁰_ f ?
- Mul.mul (Quotient.mk''
- ⟨m * i, ⟨proj 𝒜 i a ^ j * proj 𝒜 i b ^ (m - j), ?_⟩,
- ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩ : A⁰_ f)
- (Quotient.mk''
- ⟨m * i, ⟨proj 𝒜 i b ^ m, by mem_tac⟩,
- ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩ : A⁰_ f)
+ letI l : A⁰_ f := Quotient.mk''
+ ⟨m * i, ⟨proj 𝒜 i a ^ j * proj 𝒜 i b ^ (m - j), ?_⟩,
+ ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
+ letI r : A⁰_ f := Quotient.mk''
+ ⟨m * i, ⟨proj 𝒜 i b ^ m, by mem_tac⟩,
+ ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
+ l * r
else
- Mul.mul (Quotient.mk''
- ⟨m * i, ⟨proj 𝒜 i a ^ m, by mem_tac⟩,
- ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩ : A⁰_ f)
- (Quotient.mk''
- ⟨m * i, ⟨proj 𝒜 i a ^ (j - m) * proj 𝒜 i b ^ (m + m - j), ?_⟩,
- ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩ : A⁰_ f)
+ letI l : A⁰_ f := Quotient.mk''
+ ⟨m * i, ⟨proj 𝒜 i a ^ m, by mem_tac⟩,
+ ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
+ letI r : A⁰_ f := Quotient.mk''
+ ⟨m * i, ⟨proj 𝒜 i a ^ (j - m) * proj 𝒜 i b ^ (m + m - j), ?_⟩,
+ ⟨_, by rw [mul_comm]; mem_tac⟩, ⟨i, rfl⟩⟩
+ l * r
rotate_left
· rw [(_ : m * i = _)]
-- Porting note: it seems unification with mul_mem is more fiddly reducing value of mem_tac
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -83,7 +83,7 @@ open DirectSum SetLike.GradedMonoid Localization
open Finset hiding mk_zero
-variable {R A : Type _}
+variable {R A : Type*}
variable [CommRing R] [CommRing A] [Algebra R A]
@@ -2,16 +2,13 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang
-
-! This file was ported from Lean 3 source module algebraic_geometry.projective_spectrum.scheme
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.AlgebraicGeometry.ProjectiveSpectrum.StructureSheaf
import Mathlib.AlgebraicGeometry.Spec
import Mathlib.RingTheory.GradedAlgebra.Radical
+#align_import algebraic_geometry.projective_spectrum.scheme from "leanprover-community/mathlib"@"d39590fc8728fbf6743249802486f8c91ffe07bc"
+
/-!
# Proj as a scheme
@@ -278,7 +278,7 @@ def toFun (x : Proj.T| pbo f) : Spec.T A⁰_ f :=
/-
The preimage of basic open set `D(a/f^n)` in `Spec A⁰_f` under the forward map from `Proj A` to
-`Spec A⁰_f` is the basic open set `D(a) ∩ D(f)` in `Proj A`. This lemma is used to prove that the
+`Spec A⁰_f` is the basic open set `D(a) ∩ D(f)` in `Proj A`. This lemma is used to prove that the
forward map is continuous.
-/
theorem preimage_eq (a b : A) (k : ℕ) (a_mem : a ∈ 𝒜 k) (b_mem1 : b ∈ 𝒜 k)
@@ -572,4 +572,3 @@ end FromSpec
end ProjIsoSpecTopComponent
end AlgebraicGeometry
-
The unported dependencies are