Zulip Chat Archive
Stream: new members
Topic: simp, equality, and instances
Simon Winwood (Sep 24 2018 at 22:29):
Hi, I am trying to prove that list intersection with a singleton list is essentially a filter, and get this sub-goal:
lemma filter_mem_singleton_is_filter_eq {a} [decidable_eq a] {x : a} {xs : list a}: filter (λy, y ∈ [x]) xs = filter (λy, y = x) xs :=
this is more or less trivial, but for the implicite decidable
term in the filter. When I rewrite the mem term to be eq, the terms look like:
a : Type u_1, _inst_1 : decidable_eq a, x : a, xs : list a ⊢ @filter a (λ (y : a), y = x) (@eq.rec (a → Prop) (λ (y : a), y ∈ [x]) (@decidable_pred a) (λ (a_1 : a), @list.decidable_mem a _inst_1 a_1 [x]) (λ (y : a), y = x) _) xs = @filter a (λ (y : a), y = x) (λ (a : a), _inst_1 a x) xs
where the terms are equal but for the instance terms (after simp, dsimp
). I have run into this before, but managed to find a workaround. My questions is: is this common, and what is the solution, or am I doing something that is very un-lean?
Mario Carneiro (Sep 24 2018 at 22:35):
When you get to that goal, use congr
to simplify it
Mario Carneiro (Sep 24 2018 at 22:35):
before the rw
Simon Winwood (Sep 24 2018 at 22:36):
oh, nice, that works.
Mario Carneiro (Sep 24 2018 at 22:36):
congr
knows about subsingleton arguments and will automatically prove they are equal. In this case decidable p
is a subsingleton
Simon Winwood (Sep 24 2018 at 22:42):
and a follow-on - is there somewhere I should be sending the lemmas I prove? They look like they should be in the standard library, but I don't know the protocol for submitting them. These are lemmas like the interaction between list.inter and const etc..
Mario Carneiro (Sep 24 2018 at 22:47):
This should probably be going into mathlib. The core library is frozen and does not accept PRs
Mario Carneiro (Sep 24 2018 at 22:49):
Although I'm not sure I want this particular theorem, it seems a bit specialized... Both sides are equivalent to list.repeat x (xs.count x)
Simon Winwood (Sep 24 2018 at 22:51):
This is a helper lemma, so maybe not. It looks like mathlib has a bunch of lemmas which may do what I want, anyway. Thanks!
Last updated: Dec 20 2023 at 11:08 UTC