Zulip Chat Archive
Stream: Is there code for X?
Topic: Set image of `Quotient.mk`
Artie Khovanov (Jul 19 2025 at 22:00):
I can't find anything like the following:
theorem Quotient.image_mk_eq_lift {α : Type*} {s : Setoid α} (A : Set α)
(h : ∀ x y, x ≈ y → (x ∈ A ↔ y ∈ A)) :
(Quotient.mk s) '' A = (Quotient.lift (· ∈ A) (by simpa)) := by
aesop (add unsafe forward Quotient.exists_rep)
Am I missing some alternative statement? And if not, where should this lemma live?
Weiyi Wang (Jul 19 2025 at 23:03):
My guess is that having by simpa (or any tactical proof) in the theorem statement isn't preferred. I wonder what the use case of this is. Perhaps there is a better way to state things if we see the context
Artie Khovanov (Jul 19 2025 at 23:04):
The application is pushing a DecidablePred instance through a quotient
import Mathlib
@[to_additive]
theorem QuotientGroup.mem_iff_mem_of_rel {G S : Type*} [CommGroup G]
[SetLike S G] [MulMemClass S G] (H : Subgroup G) {M : S} (hM : (H : Set G) ⊆ M) :
∀ x y, QuotientGroup.leftRel H x y → (x ∈ M ↔ y ∈ M) := fun x y hxy => by
rw [QuotientGroup.leftRel_apply] at hxy
exact ⟨fun h => by simpa using mul_mem h <| hM hxy,
fun h => by simpa using mul_mem h <| hM <| inv_mem hxy⟩
def decidablePred_mem_map_quotient_mk
{R S : Type*} [CommRing R] [SetLike S R] [AddMemClass S R] (I : Ideal R)
{M : S} (hM : (I : Set R) ⊆ M) [DecidablePred (· ∈ M)] :
DecidablePred (· ∈ (Ideal.Quotient.mk I) '' M) := by
have : ∀ x y, I.quotientRel x y → (x ∈ M ↔ y ∈ M) :=
QuotientAddGroup.mem_iff_mem_of_rel _ (by simpa)
rw [show (· ∈ (Ideal.Quotient.mk I) '' _) = (· ∈ (Quotient.mk _) '' _) by rfl,
Quotient.image_mk_eq_lift _ this]
exact Quotient.lift.decidablePred (· ∈ M) (by simpa)
Aaron Liu (Jul 19 2025 at 23:05):
My guess is that conflating Set (Quotient s) and Quotient s → Prop in the theorem statement isn't preferred
Artie Khovanov (Jul 19 2025 at 23:06):
Does anyone have a thought how to proceed with upstreaming the mathematical content of this?
Last updated: Dec 20 2025 at 21:32 UTC