Zulip Chat Archive
Stream: mathlib4
Topic: define class of ideal lies over
Yongle Hu (Sep 30 2024 at 06:54):
Now we have Quotient.algebraQuotientOfLEComap in mathlib, which states that if S
is an R
-algebra, p
and P
are ideals of R
and S
respectively, and P
lies over p
, then R / p
is an S / P
-algebra. However, this is a def
rather than an instance
, since during instance inference, conditions like (h : p ≤ Ideal.comap f P)
are not searched for. This brings some difficulties in practice. For example, writing (B ⧸ P) ≃ₐ[A ⧸ p] (B ⧸ P)
and Module.Finite (A ⧸ p) (B ⧸ P)
results in errors.
To solve it, my current idea is to define a class
of lying over. Then we can write (B ⧸ P) ≃ₐ[A ⧸ p] (B ⧸ P)
and Module.Finite (A ⧸ p) (B ⧸ P)
.
import Mathlib.RingTheory.Ideal.Over
variable {A B : Type*} [CommRing A] [CommRing B] [Algebra A B] (P : Ideal B) (p : Ideal A)
class ideal_lies_over : Prop where over : p = Ideal.comap (algebraMap A B) P
infix : 50 "lies_over" => ideal_lies_over
variable [ho : P lies_over p]
instance : Algebra (A ⧸ p) (B ⧸ P) := Ideal.Quotient.algebraQuotientOfLEComap (le_of_eq ho.over)
instance : IsScalarTower A (A ⧸ p) (B ⧸ P) := IsScalarTower.of_algebraMap_eq (fun _ ↦ rfl)
instance [Module.Finite A B] : Module.Finite (A ⧸ p) (B ⧸ P) :=
Module.Finite.of_restrictScalars_finite A (A ⧸ p) (B ⧸ P)
#check (B ⧸ P) ≃ₐ[A ⧸ p] (B ⧸ P)
Is there a better way to solve it? Thanks!
Kevin Buzzard (Oct 01 2024 at 21:35):
In the FLT repo I demonstrate another solution (which I learnt from Amelia) which is basically just to add the assumption that S/P is an R/p algebra and also to add the IsScalarTower instances for R,R/p,S/P and R,S,S/P. Now you can prove that p is a subset of the pullback of P!
Yongle Hu (Oct 02 2024 at 01:46):
That's a very clever idea! But the condition I need is p = Ideal.comap (algebraMap A B) P
, so using this method, do I need to state p = Ideal.comap (algebraMap A B) P
and [Algebra (R ⧸ p) (S ⧸ P)] [IsScalarTower R (R ⧸ p) (S ⧸ P)]
at the same time?
Kevin Buzzard (Oct 04 2024 at 21:09):
I guess this would be one way out of the problem. Your ideal_lies_over
solution looks interesting though. I am not really able to judge the relative merits of these approaches.
Last updated: May 02 2025 at 03:31 UTC