|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Christian Merten. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Christian Merten |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Algebra.Category.Ring.Under.Limits |
| 9 | +public import Mathlib.CategoryTheory.Limits.MorphismProperty |
| 10 | +public import Mathlib.CategoryTheory.ObjectProperty.FiniteProducts |
| 11 | + |
| 12 | +/-! |
| 13 | +# Properties of `P.Under ⊤ R` for `R : CommRingCat` |
| 14 | +
|
| 15 | +In this file we translate ring theoretic properties of a property of ring homomorphisms |
| 16 | +`P` in properties of the category `P.Under ⊤ R`. |
| 17 | +
|
| 18 | +## Main results |
| 19 | +
|
| 20 | +- `CommRingCat.Under.hasFiniteLimits`: If `P` is stable under finite products and equalizers, |
| 21 | + `P.Under ⊤ R` has finite limits. |
| 22 | +-/ |
| 23 | + |
| 24 | +@[expose] public section |
| 25 | + |
| 26 | +universe u |
| 27 | + |
| 28 | +open CategoryTheory Limits |
| 29 | + |
| 30 | +variable {Q : ∀ {R S : Type u} [CommRing R] [CommRing S], (R →+* S) → Prop} |
| 31 | + |
| 32 | +open MorphismProperty |
| 33 | + |
| 34 | +lemma RingHom.HasFiniteProducts.isClosedUnderLimitsOfShape (hQi : RespectsIso Q) |
| 35 | + (hQp : HasFiniteProducts Q) (R : CommRingCat.{u}) : |
| 36 | + (toMorphismProperty Q).underObj (X := R).IsClosedUnderFiniteProducts := by |
| 37 | + refine .of_isClosedUnderLimitsOfShape fun (J : Type u) _ ↦ ⟨fun A ⟨pres, hpres⟩ ↦ ?_⟩ |
| 38 | + let e : A ≅ CommRingCat.mkUnder R (Π i, pres.diag.obj ⟨i⟩) := |
| 39 | + (limit.isoLimitCone ⟨_, pres.isLimit⟩).symm ≪≫ |
| 40 | + HasLimit.isoOfNatIso (Discrete.natIso fun i ↦ eqToIso <| by simp) ≪≫ |
| 41 | + limit.isoLimitCone ⟨CommRingCat.Under.piFan <| fun i ↦ (pres.diag.obj ⟨i⟩), |
| 42 | + CommRingCat.Under.piFanIsLimit <| fun i ↦ (pres.diag.obj ⟨i⟩)⟩ |
| 43 | + have : (toMorphismProperty Q).RespectsIso := toMorphismProperty_respectsIso_iff.mp hQi |
| 44 | + rw [underObj_iff, ← Under.w e.inv, (toMorphismProperty Q).cancel_right_of_respectsIso] |
| 45 | + exact hQp _ fun i ↦ hpres _ |
| 46 | + |
| 47 | +lemma RingHom.HasEqualizers.isClosedUnderLimitsOfShape (hQi : RespectsIso Q) |
| 48 | + (hQe : HasEqualizers Q) (R : CommRingCat.{u}) : |
| 49 | + (toMorphismProperty Q).underObj (X := R).IsClosedUnderLimitsOfShape WalkingParallelPair := by |
| 50 | + refine ⟨fun A ⟨pres, hpres⟩ ↦ ?_⟩ |
| 51 | + let e : A ≅ |
| 52 | + CommRingCat.mkUnder R |
| 53 | + (AlgHom.equalizer (R := R) |
| 54 | + (CommRingCat.toAlgHom (pres.diag.map .left)) |
| 55 | + (CommRingCat.toAlgHom (pres.diag.map .right))) := |
| 56 | + (limit.isoLimitCone ⟨_, pres.isLimit⟩).symm ≪≫ |
| 57 | + HasLimit.isoOfNatIso (diagramIsoParallelPair _) ≪≫ limit.isoLimitCone |
| 58 | + ⟨CommRingCat.Under.equalizerFork (pres.diag.map .left) (pres.diag.map .right), |
| 59 | + CommRingCat.Under.equalizerForkIsLimit |
| 60 | + (pres.diag.map .left) (pres.diag.map .right)⟩ |
| 61 | + have : (toMorphismProperty Q).RespectsIso := toMorphismProperty_respectsIso_iff.mp hQi |
| 62 | + rw [underObj_iff, ← Under.w e.inv, (toMorphismProperty Q).cancel_right_of_respectsIso] |
| 63 | + exact hQe _ _ (hpres .zero) (hpres .one) |
| 64 | + |
| 65 | +/-- If `Q` is stable under finite products, the inclusion from the subcategory of `Under R` defined |
| 66 | +by `Q` creates finite products. -/ |
| 67 | +@[implicit_reducible] |
| 68 | +noncomputable def RingHom.HasFiniteProducts.createsFiniteProductsForget |
| 69 | + (hQi : RespectsIso Q) (hQp : HasFiniteProducts Q) (R : CommRingCat.{u}) : |
| 70 | + CreatesFiniteProducts (MorphismProperty.Under.forget (toMorphismProperty Q) ⊤ R) := by |
| 71 | + refine .mk' _ fun (J : Type u) _ ↦ ?_ |
| 72 | + apply +allowSynthFailures Comma.forgetCreatesLimitsOfShapeOfClosed |
| 73 | + have := hQp.isClosedUnderLimitsOfShape hQi R |
| 74 | + exact inferInstanceAs <| (toMorphismProperty Q).underObj.IsClosedUnderLimitsOfShape _ |
| 75 | + |
| 76 | +lemma RingHom.HasFiniteProducts.hasFiniteProducts (hQi : RespectsIso Q) (hQp : HasFiniteProducts Q) |
| 77 | + (R : CommRingCat.{u}) : |
| 78 | + Limits.HasFiniteProducts ((RingHom.toMorphismProperty Q).Under ⊤ R) := by |
| 79 | + refine ⟨fun n ↦ ⟨fun D ↦ ?_⟩⟩ |
| 80 | + have := hQp.createsFiniteProductsForget hQi R |
| 81 | + exact CategoryTheory.hasLimit_of_created D (Under.forget _ _ R) |
| 82 | + |
| 83 | +/-- If `Q` is stable under equalizers, the inclusion from the subcategory of `Under R` defined |
| 84 | +by `Q` creates equalizers. -/ |
| 85 | +@[implicit_reducible] |
| 86 | +noncomputable def RingHom.HasEqualizers.createsLimitsWalkingParallelPair (hQi : RespectsIso Q) |
| 87 | + (hQe : HasEqualizers Q) (R : CommRingCat.{u}) : |
| 88 | + CreatesLimitsOfShape WalkingParallelPair |
| 89 | + (MorphismProperty.Under.forget (toMorphismProperty Q) ⊤ R) := by |
| 90 | + apply +allowSynthFailures Comma.forgetCreatesLimitsOfShapeOfClosed |
| 91 | + exact hQe.isClosedUnderLimitsOfShape hQi _ |
| 92 | + |
| 93 | +lemma RingHom.HasEqualizers.hasEqualizers (hQi : RespectsIso Q) (hQe : HasEqualizers Q) |
| 94 | + (R : CommRingCat.{u}) : |
| 95 | + Limits.HasEqualizers ((toMorphismProperty Q).Under ⊤ R) := by |
| 96 | + refine ⟨fun D ↦ ?_⟩ |
| 97 | + have := hQe.createsLimitsWalkingParallelPair hQi R |
| 98 | + exact hasLimit_of_created D (Under.forget _ _ R) |
| 99 | + |
| 100 | +namespace CommRingCat |
| 101 | + |
| 102 | +/-- If `Q` is stable under finite products and equalizers, the inclusion from the subcategory of |
| 103 | +`Under R` defined by `Q` creates finite limits. -/ |
| 104 | +@[implicit_reducible] |
| 105 | +noncomputable def Under.createsFiniteLimitsForget (hQi : RingHom.RespectsIso Q) |
| 106 | + (hQp : RingHom.HasFiniteProducts Q) (hQe : RingHom.HasEqualizers Q) (R : CommRingCat.{u}) : |
| 107 | + CreatesFiniteLimits (Under.forget (RingHom.toMorphismProperty Q) ⊤ R) := |
| 108 | + letI := hQp.createsFiniteProductsForget hQi |
| 109 | + letI := hQe.createsLimitsWalkingParallelPair hQi |
| 110 | + createsFiniteLimitsOfCreatesEqualizersAndFiniteProducts _ |
| 111 | + |
| 112 | +lemma Under.hasFiniteLimits (hQi : RingHom.RespectsIso Q) |
| 113 | + (hQp : RingHom.HasFiniteProducts Q) (hQe : RingHom.HasEqualizers Q) (R : CommRingCat.{u}) : |
| 114 | + HasFiniteLimits ((RingHom.toMorphismProperty Q).Under ⊤ R) := |
| 115 | + have := hQp.hasFiniteProducts hQi |
| 116 | + have := hQe.hasEqualizers hQi |
| 117 | + hasFiniteLimits_of_hasEqualizers_and_finite_products |
| 118 | + |
| 119 | +end CommRingCat |
0 commit comments