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: Jeremy Dawson <Jeremy.Dawson AT anu.edu.au>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] clone evars in destruct
  • Date: Sat, 16 Jan 2021 10:01:00 +1100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=anu.edu.au; dmarc=pass action=none header.from=anu.edu.au; dkim=pass header.d=anu.edu.au; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m3fXee3N1iyLC4WIN4jGXK7/TdNPK/bU2Kn/EsfqqgM=; b=WZCEfXdbQXmhUxjRxY13a7jl82bcXWYgKDM1J1Y5tE+4FcTDkl8RQ6kFbSO6uHniXBsSobwNlX6xq1/BIXF1fO2qLa2P8y9Tn/q2jlN058FwUmMX01IaBCa4D1vFK5pd8eq7+ldT6XuiJ07aAa5j/NQxOIhjO6lUVfSc57No1bjnmmjyYdESzhFgsHwKzOMWnqAnLVK9WmZMPTpxLKnZEOehwnnt69XSZcuSFfWGJ2ybOY5Rjc2SxYgKWZqOpzccvcU5buKQjxEsyIxG+lnmOZEvrlru5aVVeqY0mSWDIL4C2DaUOyR5hqcbPevG9FCNghYk3e8v39j0rTxaMlqNNg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IooKS4GTmGYI6xum21DDZ2q06SdnwnuCGrFApxhifkLVHJjKUkYip8kN+EeZjeX4LWCu8hmYW8gtolrbaaGvM+0WKL9p7UVDp/iRoupIKcRxRPkO0GEHRJEFvhQZ17hPDNuE9/WdQY9XXiuBC0DNOXpuM+lj0RfbP5nvmGnXoNNTuI8lwky1A1nb37bus0EBCCJM2d4qvEO0IEiWMPi8OIRWZCjjYVJQLJNbmokumvwQOtKovaJ1eF/ASFtQlnGoVgOe+tcGnIyfN/zrhGfzMWWfYgBS4LBTBpbR7CeCEU38DlAvBPOjnyCW5+iVbLnxGmKHEmrjtEHb1w6XW20qNA==
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=Jeremy.Dawson AT anu.edu.au; spf=Pass smtp.mailfrom=Jeremy.Dawson AT anu.edu.au; spf=Pass smtp.helo=postmaster AT AUS01-ME3-obe.outbound.protection.outlook.com
  • Ironport-phdr: 9a23:5M1b2xLETKUPpQt999mcpTZWNBhigK39O0sv0rFitYgfLf3xwZ3uMQTl6Ol3ixeRBMOHsqMC07Gd6/moGTRZp8rY7zZaKN0EfiRGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq80bjZF+Jqs/xRfFvmZEcPlSyW90OF6fhRnx6tqy8ZJ57yhcp/ct/NNcXKvneKg1UaZWByk8PWAv483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vii476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWGhPUdtLVyFZH42ycYUPAeoCM+hWoYbypUcBoxS/BQajH+7v1jxFi2Xq0aEm3eksEwfL1xEgEdIUt3TUqc34OqMMXuCv0qbIyDXCZO5Y1zjn5onIaRchofeRVr93dcTe11MvGB3AjlSQs4DrMSma1+oWs2ic6eptTvigi2g6qw1rvDeg29oshpPTiYII013J8zhyz4kpK9OiUkF7fcKkH4VKtyGcL4Z7TcMsTmBptSg0ybAKpJq2cTUUxZg7xxDSZfyKfpaW7x/hSeqcJSt0iXFrdrywiRu8/1StxO3+W8WqzFtHsilIn9/RvX4D0BzT79KISvp7/kq5xTmP0BrT6udaLkAwkarXMYAuzaMtlpcVrE/NHTf2lV35gaOKbEko5/Sk5ub9brn7upORNJV4hhzwP6ktgsCyDuA1PhITU2WY5OiwzqPv8VP6TblQk/E7kq/Uu43AK8sBvK62GQpV354j6xmhCzem18wVkGUJI1xYZB6LkpHlNVbBLv32FPu/hE+jnylxy/DBI73hHo7CLn/ekLfnYLlx8VZcyBA0zdBD+Z1bFq0BIPP0Wk/3rtDYCQI5MxCww+bgD9V91ZkSVn6IAq+cKK/SsFmI6fwzI+SUa4IZpCzxJ+U56/Psl3M1hEMRcKqz0ZcKZn21HexqI0CDbnrthtcBH30Kvg07TOHyjFONTyRTaGi3X6M8/D01BpipDInYRoCqhryMxz20HptLZmxcFF+DDGroe5+eVPcRcC6SONNukiQYVbi9TI8szQ2htAjjy7Z+MuXU/jAYuon42dhu5+zTkAky+iZuA8Sc1WGNVWB0kXkSSz84xqAs6XB6n1yEyO1zh+FSPd1V/fJAFAkgZrDGyOkvKd3oVwfQNvuAV02hRJ3yIzwrQ9cghfMHfF16Hf2riA2F0ia3RbYIwe/YTKco+77RiiCib/12zGzLgfF40gsWB/BXPGjjvZZRsgjeA4mVzBewqp3yLOE58XWI822Oi22ToEtfTQh8F73fWmwSbVfXqtK/4V7eS7ipCvIsNQ4TkJfeeJsPUcXgiBB9fNmmIM7XOjjjkmGtQxuE2/WFcdiyIjRP7GDmEEEB1jsr0zODPAk6CD2mpjuEXjVoCBTib16q+PQs8X4=


Hi Abishek,

In this particular example, I would do the step
destruct b.
before doing
eexists.

This seems to avoid the problem. The way I would think of it is that the eexists step puts in one value (although you haven't yet worked out what it is) to satisfy the existential goal - and neither 1 nor 2 would be a satisfactory choice. So you need to split the whole thing into two separate problems, each with its own existential goal.

Cheers,

Jeremy

On 16/1/21 8:18 am, Abhishek Anand wrote:
eexists is very helpful in proofs because it lets us avoid computing/simplifying complex things in our head and let Coq do all that and almost figure out the right answer.
However, the eexists implementation in Coq does not achieve the full potential.
For example, making cases is dangerous as it requires the value on both sides to be equal:

Require Import Nat.

Lemma xx (b:bool): exists n, n = if b then 1 else 2.
  eexists.
  destruct b.
  - reflexivity.
  - (* cant prove 1=2 *)
Abort.

In the above simple/contrived, the right answer is immediately clear but it is not the case in many proofs. Is there a way to ask destruct to clone some chosen evars for each case as I did below manually:

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.

-- Abhishek
http://www.cs.cornell.edu/~aa755/



Archive powered by MHonArc 2.6.19+.

Top of Page