Zulip Chat Archive
Stream: general
Topic: Automation for list.perm
Neil Strickland (Jan 13 2020 at 14:21):
What's the best approach for this goal?
lemma L (a b c d : ℕ) : ([a,b,c,d] : multiset ℕ) = ([d,a,c,b] : multiset ℕ) := sorry
Here is the proof that we want to synthesise, but of course we do not want to write it by hand.
begin
apply quotient.sound,
let h := calc
[d,a,c,b] ≈ [a,d,c,b] : list.perm.swap a d [c,b]
... ≈ [a,c,d,b] : list.perm.skip a (list.perm.swap c d [b])
... ≈ [a,c,b,d] : list.perm.skip a (list.perm.skip c (list.perm.swap b d []))
... ≈ [a,b,c,d] : list.perm.skip a (list.perm.swap b c [d]),
exact h.symm
end
The abel tactic can do it after a tiny translation:
begin
change (multiset.cons a 0) +
(multiset.cons b 0) +
(multiset.cons c 0) +
(multiset.cons d 0) =
(multiset.cons d 0) +
(multiset.cons a 0) +
(multiset.cons c 0) +
(multiset.cons b 0) ,
abel,
end
Presumably it should be very easy to automate that first step. I might take it as a baby exercise in tactic programming if no one suggests any better approach.
Johan Commelin (Jan 13 2020 at 14:36):
@Neil Strickland Here's the same thing as your second version, but more concise
begin change {a} + {b} + {c} + {d} = {d} + {a} + {c} + {b}, abel, end
Johan Commelin (Jan 13 2020 at 14:36):
A little helper tactic would certainly be useful.
Last updated: May 02 2025 at 03:31 UTC