Is there any way to use the decide equality
tactic with mutually recursive types in Coq?
For example, if I've got something like this:
Inductive LTree : Set :=
| LNil
| LNode (x: LTree) (y: RTree)
with RTree : Set :=
| RNil
| RNode (x: Tree) (y: RTree).
Lemma eq_LTree : forall (x y : LTree), {x = y} + {x <> y}.
Proof.
decide equality; auto.
This leaves me with the goal:
y0: RTree
y1: RTree
{y0 = y1} + {y0 <> y1}
But I can't solve that until I've derived equality for RTree
, which will have the same problem.
You can use decide equality
in this case if you prove the two lemmas for LTree
s and RTree
s simultaneously:
Lemma eq_LTree : forall (x y : LTree), {x = y} + {x <> y}
with eq_RTree : forall (x y : RTree), {x = y} + {x <> y}.
Proof.
decide equality.
decide equality.
Qed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With