coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Adam Chlipala <adamc AT csail.mit.edu>
- To: Rémi Nollet <remi.nollet AT ens-lyon.fr>
- Cc: coq-club AT inria.fr
- Subject: Re: [Coq-Club] proving impossibility of recursive equality
- Date: Fri, 13 Jul 2012 09:39:04 -0400
Rémi Nollet wrote:
I have a type for some trees, which is :
Inductive t : Set :=
| Zero : t
| Gen : A -> t
| Opp : t -> t
| Add : t -> t -> t
and I want to prove something like :
Goal forall x y, x <> Add (Opp (Opp x)) y
I hoped [discriminate] would solve it, but it does not; and I have not found anything which could help, me in the documentation.
I'm not aware of some hidden feature of Coq that would solve your problem directly, but here is an instance of a general recipe you can use for deriving such contradictions:
Fixpoint size (x : t) : nat :=
match x with
| Zero => O
| Gen _ => O
| Opp y => S (size y)
| Add y z => size y + size z
end.
Lemma size_argument : forall x y : t,
size x <> size y
-> x <> y.
congruence.
Qed.
Require Import Omega.
Goal forall x y, x <> Add (Opp (Opp x)) y.
intros; apply size_argument; simpl; omega.
Qed.
- [Coq-Club] proving impossibility of recursive equality, Rémi Nollet, 07/13/2012
- Re: [Coq-Club] proving impossibility of recursive equality, Adam Chlipala, 07/13/2012
- Re: [Coq-Club] proving impossibility of recursive equality, Rémi Nollet, 07/13/2012
- Re: [Coq-Club] proving impossibility of recursive equality, Daniel Schepler, 07/13/2012
- Re: [Coq-Club] proving impossibility of recursive equality, Adam Chlipala, 07/13/2012
Archive powered by MHonArc 2.6.18.