From: Vaidas Gasiunas <gasiunas@informatik.tu-darmstadt.de>
In Isabelle there is a nice property, that from "f a = x" "f b = y" it
automatically concludes that "x = y".
Sometimes I define functions as inductive relations and prove that they
are functional, e.g. "[| (a, b) in myrel; (a, b') in myrel |] ==> b =
b'". How to achieve that such lemmas were applied automatically?
Greetings,
Vaidas
smime.p7s
From: Tobias Nipkow <nipkow@in.tum.de>
Vaidas Gasiunas schrieb:
In Isabelle there is a nice property, that from "f a = x" "f b = y" it
automatically concludes that "x = y".
I hope not! That is, only if a=b. Then this is just rewriting.
Sometimes I define functions as inductive relations and prove that they
are functional, e.g. "[| (a, b) in myrel; (a, b') in myrel |] ==> b =
b'". How to achieve that such lemmas were applied automatically?
If you give them to blast/fast/fastsimp/auto as dstruction rules, ie via
"dest: ..." (or "dest!: ...") they may help. In the case of blast/fast
only if one of b or b' is just a variable.
Tobias
From: Vaidas Gasiunas <gasiunas@informatik.tu-darmstadt.de>
I have experimented with various formulations of the lemma, for example
I tried to make an elimination rule like:
"[| (a, b) in myrel; (a, b') in myrel; [| (a, b) in myrel; b = b' |] ==>
P |] ==> P"
Indeed "[| (a, b) in myrel; (a, b') in myrel |] ==> b = b'" works best
as destruction rule. I can even mark it with [dest] and then it is
applied successfully automatically.
Thanks,
Vaidas
Last updated: Nov 21 2024 at 12:39 UTC