Skip to Content.
Sympa Menu

coq-club - [Coq-Club] Ltac body involving a "with" clause

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] Ltac body involving a "with" clause


Chronological Thread 
  • From: "Petz, Adam Michael" <ampetz AT ku.edu>
  • To: "coq-club AT inria.fr" <coq-club AT inria.fr>
  • Subject: [Coq-Club] Ltac body involving a "with" clause
  • Date: Mon, 7 Dec 2020 21:28:41 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ku.edu; dmarc=pass action=none header.from=ku.edu; dkim=pass header.d=ku.edu; 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=zqvDK3ZagOhILPjxmFVzI9KQAW/fOVgPk1X5ZN78Vf0=; b=g8RBgVU00K8nvNJSbsYbJ/GmcGKGbSrXmqhelR80W7el9sOwUmGCnHsXrPtffqXWWxomkvsHxCilKhIURPQdo2WpbkrGbw3eXJ5qIoyhucaQEjwlwesIRslj7tNZA3nThZiwsuAXWkthZPLHhPoOvx4VFV/eVp52wO+jJk23tPK7HN6nobv3pq3GqAlsrCsfR7Foyaj96or73I4F4xJVS/xiY105hO1pCT9nFbJwkjhWEoyHqv7uAKiI7SZtM0R6PGEyHFOSJ9zD6M7fLlOx/BAo9o+qboNPsHJu0qi2q9Mw7qYbdY5sOIbJZxXL852txt2c4df6l+w1mRoaRhiQRw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UNj6bADnFB2jKcAqvDxnDEbQoqHEPJkqDuZILshX2zu2oDAper1lTgfjOWyA74UcXtYniTBysA0d1SFqVUY2h3HEXQtYR7G9qJ6xy5Uw9/lb4cc/t3iO8np4iZABVrXwD91YTBBy0jFR5y+9MG6Ctps7VWCesvFUfW44NviVM8+7tvX0qJFiIBtlE1mGI7I8sLR+T+AQXC/AywbjxJouQgZzg9U8A+cTxrxUZG8rT5Bd9HeJf8jkpJ/zj6/bxjIMCcbPcbgUtZO0NyxrQp3qA0aBJ9dTwf3C9hj7TG15F3iivVbzIVmqGbIMcez4/UIGJMfM0e7StyjFkBips0kZ8g==
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=ampetz AT ku.edu; spf=Pass smtp.mailfrom=ampetz AT ku.edu; spf=Pass smtp.helo=postmaster AT NAM10-DM6-obe.outbound.protection.outlook.com
  • Ironport-phdr: 9a23:MqBWhhxrKZle2fDXCy+O+j09IxM/srCxBDY+r6Qd2uwfIJqq85mqBkHD//Il1AaPAdyErasb16GP6P6ocFdDyK7JiGoFfp1IWk1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZrKeTpAI7SiNm82/yv95HJbAhEmTiwbalvIBi0ogjdudQajIVjJ60s1hbHv3xEdvhMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTDQhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlSEKPCM7/m7KkMx9lKJVrgy8qRxjzYDaY4+aNPticazSZt4VX3ZNXsNLWiBdGI6xbY0CBPcBM+ZCqIn9okMDoRWkCwayGOPuyydEjWLq0KInyeshFBzN0gshH90SsHTbtsv6NKMcXeuoy6TH1zDDb+tI1jfh6YnFaRMhoeyWUb1ubMXR1FAiGgXYhVqftYLrJSma1vgRs2eF9epgU/qihmE5pwx1vjWi2sUhh4vXio4Iy13J9Tl0zYk1KNC6VEJ1bsKoHIdeui+UM4Z6XMMvTWF2tCsk1rALuIK2cSYWxZkh2hXRaOSHfpCH7x7/TuqdPCt0iXB/dL+7iRu+61WsxvH+W8WszlpGsjZJnsTJu30C1BHT5MuKR/5580u9xzqDygXe5+BGLE8vkKfUNpEsz7E+m5cWsEnOECz7lFjzgaCIaEkr4fWn5uHpYrr4qJ+QK5d4hh//P6gylMGyBPk0PhQVUGWa/Omx27ju8VPiT7hPi/A6jKfUvZbHLsoBvKG5GRVa0oM75ha/ETim1NMYkGEfIl9ZfxyLkpTlN0jALv7/DPqzmlOsnyx1yPzcOb3hH4nNIWPEkLf8e7Zy9lRQyBIpzdBY+5JbFK0OIO7yWk/2stzUFBg5MxGow+bjD9V90YAeVXiTDa+eNaPeqV6I5uQxLOmQfIIYtyrxJ+I46/Lyj3I1g1sQcKez0ZcKdHy1HOxqI0CDbnrthtcBH30Kvg07TOHyklKCVCZTaGiuX6M9/Tw7C5+mAZ3dSY+wnbyNxD27EYFOZmBaFlCMFm/leJmDW/cVcS6dPsthkiEfWrW6UI8g1RSutBfgxLZ9L+rU/DcYtZP529Rv6e3Tj0J6yTshRc+ayiSGS3x+tmIOXT4/mq5l6wQpwVCalKN8nvZwFNpJ5voPXB1sZrDGyOkvQej/RhCFNv6FQVPuZ9StATg8Sph5l9YLe0thCf2hk1bO0zf8UOxdrKCCGJFhqvGU5HP2Pcsoky+bhplktEEvR450DUPjhqN78FSMVajgthzB0oqPK+Eb1iOL83qfx22Tuk0eSBR3TajOQXEYYA3RsMj94UTBCbSpDOZ+a1oT+Yu5MqJPL+bRoxBDTfbnNs7ZZjLjmHr2CBqVlOrVMNjaPl4F1SCYM3Aq1hgJ9CbUNhV4Cyu88TrT

Hello all,

 

I encountered some surprising (to me) behavior while writing an Ltac procedure involving a “with” clause.  A minimal example appears below.  The problem occurs when binding a variable from a hypothesis, then using that variable in the LHS of a with binding in the Ltac body.  My expectation is that the LHS (x in the assignment x:=y) is unaffected by substitution, and must simply match the name of a bound variable in the type of the Lemma to which it is being applied.

 

I suspected a scoping issue, so I found a workaround in temp_ltac’ below by changing the name of the bound variable to one that does not appear in the type of the Lemma.  However, I fear this could become tedious in larger developments.

 

Finally, a few questions:  Is this a bug in Ltac?  If not, are there tricks/best practices to avoid it?  Any hints on how to debug Ltac errors like this would also be much appreciated!

 

Best,

Adam

 

 

Lemma temp{A:Type} : forall (a:A), a = a.

Proof.

  trivial.

Defined.

 

Ltac temp_ltac :=

  match goal with

  | [H: ?a = _ |- _] => apply temp with (a:=a); eauto

  end.

 

Example temp_ex {A:Type} : forall (c:A), c = c -> c = c.

Proof.

  intros.

  Fail temp_ltac.

  (* Does this evaluate to: apply temp with (c:=c) ? *)

  (* Intent is as follows: *)

  apply temp with (a:=c).

Qed.

 

Ltac temp_ltac' :=

  match goal with

  | [H: ?b = _ |- _] => apply temp with (a:=b); eauto

  end.

 

Example temp_ex' {A:Type} : forall (c:A),  c = c -> c = c.

Proof.

  intros.

  temp_ltac'.

Qed.

 




Archive powered by MHonArc 2.6.19+.

Top of Page