Zulip Chat Archive
Stream: Is there code for X?
Topic: symmetric induction
Aaron Liu (Jan 08 2026 at 22:52):
How can I do induction on a product that gives me access to all the symmetries of the induction hypothesis?
Something like this:
import Mathlib
example {ι α : Type*} [Finite ι] [Preorder α] [WellFoundedLT α] {motive : (ι → α) → Prop}
(ind : ∀ i, (∀ j < i, ∀ e : ι ≃ ι, motive (j ∘ e)) → motive i) (i : ι → α) : motive i :=
sorry
I would also want this be made easy to use when I have instead of (i : ι → α) an explicit collection of (x y z : α) for some small finite number of x y z
Violeta Hernández (Jan 08 2026 at 23:46):
This sounds like you're reinventing docs#Relation.CutExpand
Violeta Hernández (Jan 08 2026 at 23:51):
Specifically, this should be provable by inducting on the image of i as a multiset
Violeta Hernández (Jan 08 2026 at 23:52):
We also have the specific case of two-element multisets as docs#Sym2.GameAdd.induction
Aaron Liu (Jan 08 2026 at 23:57):
I'd like to avoid depending on multisets..
Aaron Liu (Jan 08 2026 at 23:57):
I guess most of the Finite stuff depends on them indirectly
Violeta Hernández (Jan 09 2026 at 00:05):
I think you could add this specialization in the same file that CutExpand is defined in. And then you don't need to think about multisets anymore.
Violeta Hernández (Jan 09 2026 at 00:07):
(I guess your work would still depend on them, but yeah, that's technically true of anything involving Finite)
Aaron Liu (Jan 09 2026 at 02:16):
well I generalize the finiteness out of it
import Mathlib
example {ι α : Type*} {r : (ι → α) → (ι → α) → Prop} (hr : WellFounded r)
-- there are very many ways to state this condition
(perm : ∀ i j, ∀ e : ι ≃ ι, r i (j ∘ e) → r i j)
{motive : (ι → α) → Prop} (ind : ∀ i, (∀ j, r j i → ∀ e : ι ≃ ι, motive (j ∘ e)) → motive i)
(i : ι → α) : motive i := by
change motive (i ∘ Equiv.refl ι)
generalize Equiv.refl ι = e
induction i using hr.induction generalizing e with | _ i ih
exact ind (i ∘ e) fun j hj => ih j (perm j i e hj)
Aaron Liu (Jan 09 2026 at 02:17):
finite is only necessary to show the well founded lt
Last updated: Feb 28 2026 at 14:05 UTC