Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] clone evars in destruct

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] clone evars in destruct


Chronological Thread 
  • 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




Archive powered by MHonArc 2.6.19+.

Top of Page