coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Siegfried <siegfried42 AT posteo.net>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] clone evars in destruct
- Date: Fri, 15 Jan 2021 23:03:24 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=siegfried42 AT posteo.net; spf=Pass smtp.mailfrom=siegfried42 AT posteo.net; spf=None smtp.helo=postmaster AT mout02.posteo.de
- Ironport-phdr: 9a23:kidfiRYco3W2M2Up28XeHG//LSx+4OfEezUN459isYplN5qZr8i+bnLW6fgltlLVR4KTs6sC17OH9fi6EjVbuN7B6ClELMUTEUddyI0/pE8JOIa9E0r1LfrnPWQRPf9pcxtbxUy9KlVfA83kZlff8TWY5D8WHQjjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1MR66sRjdutMZjId/Lqs90AfFrmVHd+hLy25kOE+YkxLg6sut5pJu/DlctvA7+8JcTan2erkzQKBFAjghL207/tDguwPZTQuI6HscU2EWnQRNDgPY8hz0XYr/vzXjuOZl1yaUIcP5TbYvWTS/9KhrUwPniD0GNzEi7m7ajNF7gb9BrxKgoxx/xJPUYJ2QOfFjcK7RYc8WSGxcVctXSidPAJ6zb5EXAuQfM+ZWr5TzqVgAoxSwCgajBv/gxyRHhnPqx6A01PgtHA/E0QEmAtkAsG7UrNLwNKoKTO61zbfHzTrNb/NM2Dfy9pXHeQ0mrPGXXLJ/b8XRyUc1FwPEkFqftIPoMy2O2+QVtGib9PZgWvyoi2I9rQF+vCSvy94qh4LUiY0b1krK+j9lwIYpO9K4Ukh7bMa6HJZTsyyXK4V4T8MgTmxppis21qAKtJ26cSYFx5or2hDSZ+KJfoWV5h/uSOafLDVmiX9ler+yiRa//FSjx+HgUMS/zVVErjJdn9XRtX0A1wbf58mFR/dn8Eqs2CyD2gHS5+1cIk05kbDXJ4Muz7MxjJYfr1rPEjPslEnrgqKaakMp8fWy5ev9eLXpvJqcOpd0ig7gNqQundSyAeE/MggTQ2iX5fqw2Kf7/U3+W7VKkuM5kq7DvJ/HO8sXvq+5AwlL3YY/8xuzEjSr3dQCkXQGLl9JYhyKgonzN1zPIf30FfK/jE6tkDdvyfDGJLrhApDVI3jYkbfuY7l960BGyAoy099Q+p1ZBq8aLfLrXU/xr8DYAQE+MwCuxeboFsl92psEWW2TGq+ZLL/SsViQ6+0zJOmMfZYZtyr5K/g4/PHjlmQ5mF8Yfamxx5QbcnG4HvJ8I0WYe3XgmNkBEX1Z9jY5GeftkRiJVSNZT3e0RaM1oD8hW6y8CoKWfYGgj7Kb3Sq3VslNZ21JBEqNHHu0La2cXOwQZSXUJMJ9xG9XHYO9QpMsgEn9/DTxzKBqe7KNq38o8Kn73d0w3NX90BQ79Dh6FcOYijvfV2Zvgm4PATk7wPIm+BEv+hK4yaF9xsdgO5lT6vdOC1doMJnB07QgTcj1QR7MeZGFRQT+G4n0MXQKVts0huQ2TQNlAdz71ELb2DG2DrhTkbGXVsQ5
Hi,
On 15/01/2021 22:18, Abhishek Anand wrote:
>
> Lemma xxx (b:bool): exists n, n = if b then 1 else 2.
> eexists.
> Unshelve.
> Focus 2.
> evar (x:nat).
> evar (y:nat).
> exact (if b then ?x else ?y).
> simpl.
> destruct b.
> - reflexivity.
> - reflexivity.
> Qed.
I once needed something similar. I had a recursive Ltac that makes a
case analysis over a value and calls `shelve` when it can't destruct the
argument any more. Instead, you could `refine _` to create an unnamed evar.
The following code works, but produces warnings.
> Ltac destruct_shelve e :=
> cbn in e;
> let x1 := fresh "x" in
> let x2 := fresh "x" in
> first [ destruct e as [x1|x2]; [ try destruct_shelve x1 | try
> destruct_shelve x2]; shelve
> | destruct e as [x1]; [ try destruct_shelve x1 ]; shelve
> | destruct e as []; shelve
> ].
>
> Lemma xx (b:bool): exists n, n = if b then 1 else 2.
> eexists (ltac:(destruct_shelve b)).
> destruct b.
> - reflexivity.
> - reflexivity.
> Qed.
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature
- [Coq-Club] clone evars in destruct, Abhishek Anand, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, Hugo Herbelin, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, jonikelee AT gmail.com, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, Clément Pit-Claudel, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, Siegfried, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, Maximilian Wuttke, 01/15/2021
- Re: [Coq-Club] clone evars in destruct, Jeremy Dawson, 01/16/2021
- Re: [Coq-Club] clone evars in destruct, Hugo Herbelin, 01/15/2021
Archive powered by MHonArc 2.6.19+.