Zulip Chat Archive
Stream: new members
Topic: Standard usage of induction for quotient algebraic structure
Xingyu Zhong (Dec 31 2025 at 17:14):
In the middle of a proof, to treat some element of a quotient type as an application of the canonical quotient map, Quotient.inductionOn is used. For example, in the tactic mode,
induction' y using Quotient.inductionOn with x
where y is an element in a quotient type.
I'm wondering if there is a standard way to lift elements of a quotient algebraic structure such as quotient groups and quotient modules. I notice that there are corresponding induction_on-like theorems in Mathlib, e.g.
#check QuotientGroup.induction_on
#check Submodule.Quotient.induction_on
Are they supposed to be used for induction purpose? In practice I see lots of people still use Quotient.inductionOn directly when working with quotient algebraic structures. Up to definitional equality this won't make a difference, But I'm still interested in a textbook approach.
Another question is that, since we have upgraded versions of Quotient.lift in Mathlib that lift the bundled homomorphisms
#check QuotientGroup.lift
#check Submodule.liftQ
why there aren't any upgraded version of Quotient.inductionOn that, for example, allow us to treat any element in a quotient module M ⧸ p as some application of p.mkQ?
variable {R M : Type*} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M)
theorem Submodule.Quotient.my_induction_on {C : M ⧸ p → Prop} (x : M ⧸ p) (H : ∀ z, C (p.mkQ z)) : C x := Quotient.inductionOn' x H
After all, it respects scalar multiplication and addition. Wouldn't this be a better induction rule to live in Mathlib?
Appreciate your help!
Aaron Liu (Dec 31 2025 at 17:20):
Xingyu Zhong said:
why there aren't any upgraded version of
Quotient.inductionOnthat, for example, allow us to treat any element in a quotient moduleM ⧸ pas some application ofp.mkQ?
You can use docs#Submodule.mkQ_surjective
Yuyang Zhao (Dec 31 2025 at 20:24):
We will have general quotient lemmas if we can merge #30668. :innocent:
Yuyang Zhao (Dec 31 2025 at 20:36):
Ah, bundled homomorphisms still need to be defined separately. But bundled mkQ is usually simp to a non-bundled function. Currently docs#QuotientGroup.coe_mk' docs#Submodule.mkQ_apply are simp lemmas.
Last updated: Feb 28 2026 at 14:05 UTC