Zulip Chat Archive
Stream: Is there code for X?
Topic: induction using additional relation
Antoine Chambert-Loir (Dec 07 2025 at 14:37):
I had something of the following form to prove:
example (α : Type*) (deg : α → ℕ∞) (motive : α → ℕ∞ → Prop) (a : α) :
motive a (deg a) := by
My first attempt has been to use induction on ℕ∞ to split into the two possible cases,
⊤, or coe n, as follows, but that failed, it loses the relation between deg a and the specific case.
example (α : Type*) (deg : α → ℕ∞) (motive : α → ℕ∞ → Prop) (a : α) :
motive a (deg a) := by
induction deg a with
-- loses the relation between `deg a` and `⊤` or `n`
| top => sorry
| coe n => sorry
The same issue actually happens for
example (α : Type*) (deg : α → ℕ) (motive : α → ℕ → Prop) (a : α) :
motive a (deg a) := by
induction deg a with
-- loses the relation between `deg a` and `0` or `n`
| zero => sorry
| succ n h => sorry
The following worked, but there should be a more idiomatic way to do it, certainly using generalizing but I couldn't make it work.
example (α : Type*) (deg : α → ℕ∞) (motive : α → ℕ∞ → Prop) (a : α) :
motive a (deg a) := by
suffices ∀ n a, deg a = n → motive a n by
exact this (deg a) a (refl _)
intro n
induction n with
| top => sorry
| coe n => sorry
Riccardo Brasca (Dec 07 2025 at 14:41):
Can you write explicitly your assumptions? I mean, those that make the lemma provable.
Aaron Liu (Dec 07 2025 at 14:43):
does induction hn : deg a with work
Antoine Chambert-Loir (Dec 07 2025 at 14:44):
Yes, it does! Thanks!
Antoine Chambert-Loir (Dec 07 2025 at 14:45):
For Riccardo, unfortunately, not. α is the SpecialLinearGroup K V (for some finite dimensional K-vector space V), deg is the transvection degree, the minimal number required to write an element as a product of transvections, and motive is the assertion finrank K V ≤ deg e + finrank K e.fixedSubmodule, where e.fixedSubmodule is the eigenspace for the eigenvalue 1.
Riccardo Brasca (Dec 07 2025 at 15:10):
It' s a bit annoying that it doesn't work with match or a similar syntax :(
Riccardo Brasca (Dec 07 2025 at 15:20):
It's actually the same syntax
example (α : Type*) (deg : α → ℕ∞) (motive : α → ℕ∞ → Prop) (a : α) (h : motive a ⊤) :
motive a (deg a) := by
match d : deg a with
| ⊤ => exact h
| some A =>
sorry
Last updated: Dec 20 2025 at 21:32 UTC