coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Maximilian Wuttke <mwuttke97 AT posteo.de>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] clone evars in destruct
- Date: Fri, 15 Jan 2021 23:04:34 +0100
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=mwuttke97 AT posteo.de; spf=Pass smtp.mailfrom=mwuttke97 AT posteo.de; spf=None smtp.helo=postmaster AT mout01.posteo.de
- Ironport-phdr: 9a23:LVkZMRN10kNhY+VXB4Al6mtUPXoX/o7sNwtQ0KIMzox0Ivn+rarrMEGX3/hxlliBBdydt6sVzbKM+Pm7ACRAuc/H7CldNsQUFlcssoY/p0QYGsmLCEn2frbBThcRO4B8bmJj5GyxKkNPGczzNBX4q3y26iMOSF2kbVImbuv6FZTPgMupyuu854PcYxlShDq6fLh+MAi6oR/eu8ULhYZuMLo9xgXGrndVdela2H5jKVaPkxrh/Mu984Nv/iZKt/4968JMVLjxcrglQ7BfEDkoKX0+6tfxtRnEQwuP538cXXsTnxFVHQXL7wz0U4novCfiueVzxCeVPcvtTbApQjui9LtkSAXpiCgcKTE09nzch9Fqg6JapBKhoAF/w5LRbYqIOvdyYr/RcNUHTmdHQ81fVTFOApmkYoUPEuQPI+hYoYrzqVQAohSxBxWjCuz0xz9UhXL7x7E23/gvHAzE2gErAtIAsG7TrNXwLKocVvq6zabJzTXGbvNW3Tb955LOchs8of6MQK5wcdbSyUYxCgjIiVCQqIL4PzOJyuQNsHaU4u5iWO+0k24nrBpxoiSxyccrkIXGm5wax0nC+C5kz4k7Oce2R1RnYd64DpRQrSeaOpN2T84sTG9luDo2x7wIt5O1fiUHxpoqywDBZvCab4WF7BbuWeWNLTl3mX5rd72yihmz/EWjxODxSsa63EtIoydLlNTHq3MD1wTL58SaSfZw/l2t1DeN2gzJ5OxJIFo4mKvbJpI5wbM9koAfvVnMEyL3gkn6krGaelk+9uS15enrfrPrrYKGOYBukAHxKKEul9S/AesmNggOWHCW+eG71L3+4U31XKhGgucukqneq5DaOdoUpqmjDwBIzIkv8xe/DzG439QEhXQLMVFIdRKdg4XoOVzCOv71APalj1mtkDpn3/XGMafgApXJIHjDirDhfbNl5k5Zxgsz0Mxf545XCr4fJP/+WFT8tMTfDh8iLwy73eHnBM9g2YwAQW6PGLOWMLvOsV+U4eIiO/WDZIgMuDrkN/cl4+PugmQilF8Gfaip2IMXZ2qiEvRnJUWZe3vsjc0bHWcEpAptBNDt3VaFSHtYY2u4d6M6/DAyToy8XqnZQYX4pbWR3SK6GpxfYCh5F0yQEnqgI4CbRusQay/Dfed5lScYWL/nR4J3hkLmjxPz17cydrmcwSYfr5+2jIEptd2Wrgk78HlPN+rYy3uEFjgmhmQTWzIxmqxy8xQkmwWzlJNgivkdLuR9ovZAUwM0L5nZlrUoE9fpRg/GONuEGg//H4eWRAopR9d0+OcgJkZwH9L73kLG2De2W+ZTj7uQGJEztK7RjSD8
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.
- [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+.