Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Give scope annotations for arguments of Ltac-defined tactics?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Give scope annotations for arguments of Ltac-defined tactics?


Chronological Thread 
  • From: Jason Gross <jasongross9 AT gmail.com>
  • To: coq-club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Give scope annotations for arguments of Ltac-defined tactics?
  • Date: Tue, 4 Jan 2022 08:52:00 -0800
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jasongross9 AT gmail.com; spf=Pass smtp.mailfrom=jasongross9 AT gmail.com; spf=None smtp.helo=postmaster AT mail-il1-f179.google.com
  • Ironport-data: A9a23:I4nE3K135439ylZ07vbD5b1wkn2cJEfYwER7XOPLsXnJ3T900mAEzmZNXj2APa2MYzSjL9B2PI6//BgD75fcnN8SHQtv/xmBbVoa8JufXYzxwmTYZn7JcJWbFCqL1yivAzX5BJhcokT0+1H9YtANkVEmjfvSHuOkVLaeUsxMbVYMpBkJ2UoLd9ER2dYAbeiRW2thiPuqyyHtEAfNNw1cbgr435m+RCZH55wejt+3UmsWPpintHeG/5Uc4Ql2yauZdxMUSaEMdgK2qnqq8V23wo/Z109F5tKNl7/6dggLRueXM1HR2zxZXK+thhUErSs3uko5HKBEOAEH1nPQwY43kYoc3XCzYV9B0qnkmu0GVB9XCSZlJvxu97rOIHz5usuWp6HDWyK3na42UB1nVWEf0r8vXTsmGeYjADsKd1WIg/+86KmqT/FlwMUlNsjieo0F0kyMZxnNVaN8B8/XGvCSo4dMhmJowJofTK/KPJ9BL2d7M0HpfTlkP3M7CLYflcGUnF3BchhM8QrA/PJzuHy7IBdZ1bHsNJ/UfoXPS5wKzwCXoWXJ+2m/CRYfXOFzAAGtqhqE7tIjVwuiMG7TKFG5yhKuqFiax2hWCRlPEFXi/qj/hUm5VNZSbUcT/0LCaIBaGFODFrHAs9+Q+RZofSLwn/JfFuQ77EeGza+8D8OxGD0fVjAYADA5nJZeeNHpv2NlW/vmADVutPueTnf1GnK8xd+tEXB9EFLurhPogefIDxcPbW3zYt/yog5fLZOI
  • Ironport-hdrordr: A9a23:KRvRFK6SThpJoB7E5QPXwPbXdLJyesId70hD6mlbQxY9SL3hqynOpoVj6faQslwssR4b6LW90cW7MBHhHP1OgLX5X43SODUO0VHAROoD0WKF+UyCJ8SUzJ876U4PSdkZNDQyNzRHZATBjTVQ3+xO/DBPys6Vuds=
  • Ironport-phdr: A9a23:FMp82xMirnVFYjE4B10l6nbNDRdPi9zP1u491JMrhvp0f7i5+Ny6ZQqDv6wr1QSSFtSBo9t/yMPu+5j6XmIB5ZvT+FsjS7drEyE/tMMNggY7C9SEA0CoZNTjbig9AdgQHAQ9pyLzPkdaAtvxaEPPqXOu8zESBg//NQ1oLejpB4Lelcu62/6v95HJfglFijSwbbx2IRmosA7cqtQYjYx+J6gr1xDHuGFIe+NYxWNpIVKcgRPx7dqu8ZBg7ipdpesv+9ZPXqvmcas4S6dYDCk9PGAu+MLrrxjDQhCR6XYaT24bjwBHAwnB7BH9Q5fxri73vfdz1SWGIcH7S60/VDK/5KlpVRDokj8KODE38G7VisJ+gqFVrg+/qRNj2IPbep2ZOeBkc6/BYd8XR2xMVdtRWSxbBYO8apMCAe4bMuZDqIn9oUYFoxqkBQmrH+Pv0SJDi3j03aIgyOQhFgfG3AM6H9IJq3TUt9H4ObwdUeCw1qbIzDHDY+lK1jf67YjFaxYsquyDUrxsa8Te01UvFx/bgVWKr4zoJy+Z2/oTv2SH8edtS+yhhnM6pw9/vDSiydoghInKi48bxF3J9Tt0zYYxKNGlRkN2fN2pHYVUui2GKYd4TMMvTm9utS0nxLMGvpu7czILyJQh3xPfavqHc5KJ4h35TuqRLy14iGpkeLK5nRay8FKvxvfmWsm6ylZHqDdOnNrUtn0VyRDf9syKRuF+80qhwzqDygHe5+BeLUwpl6fWL5gsyaMqmJUJq0TMBCr2lV32jKCIckUk/fCl6+H9bbXnop+QLo50igXjPqg3lMyzHOY1PwwUU2iU/uS807Lj/UnnT7lQkvI2lazZvIjbJcQduKG5HxdY3pg/5xu7FTur09QVkWMaIF9EeR+LlZXlNlPKLfzgCPewmVWskDNlx/DcOb3hB43ALnrZn7f6erZ97UFcyBA0zdBE/JJZDqoMIP32WkDrtdzYCgU1PBCzw+biENl9zJ8RWXqTAq+FN6PfqUOH5uU2I+WVeIAVvCv9JOM+6v71jX45nEcdcrOz0ZsWbnC4BPVmLF+DbXrimNdSWVsN6wE5VanhjECIGWpYYG/3VKYh7Bk6DpinBMHNXNb+rqaG2XKZF4ZRYChpEFeXCj+8dYyfXPEDciWJOZ5JnTkNVLznQIgkg0L9/DTmwqZqe7KHshYTsojugYAdDwz7kBgz8Xl1C53Y3TjSHid7mWQHQzJw16d68xQVIrir3q1xgvgeHttWtaohuuISOpvVzug8ANf3CFqpQw==

This is not possible (and probably won't ever be), but you can do this in Ltac2, see https://coq.inria.fr/refman/proof-engine/ltac2.html#notations  and https://coq.inria.fr/refman/proof-engine/ltac2.html#syntactic-classes , specifically the bit about scope_keys on constr.  I think the syntax is something like
Ltac2 Notation "apply_f" p(constr(my_nat)) := apply '(f $p).


On Tue, Jan 4, 2022, 03:22 Peter LeFanu Lumsdaine <p.l.lumsdaine AT gmail.com> wrote:
Is there a way to give scope annotations to arguments of an Ltac-defined tactic (or a Tactic Notation), so that the argument is always parsed with the specified scope?  I’m looking for something analogous to what you can give for tunctions using [Arguments]:
    Arguments my_function _%nat.
but for tactics.  If I define
    Ltac apply_my_function p := apply (my_function p).
then the argument to [apply_my_function] will *not* automatically be parsed in nat_scope, even though in [apply (my_function p)] it would be.

I’ve tried a few things like
    Tactic Notation "apply_my_function" uconstr(p) := apply (my_function p%nat).
but haven’t found anything that works.

A self-contained MWE for the problem follows below.

Best,
–Peter.

===============
Declare Scope my_nat_scope.
Notation "!1" := Nat.one : my_nat_scope.

Declare Scope my_bool_scope.
Notation "!1" := true : my_bool_scope.

Open Scope my_bool_scope.

Definition f : nat -> nat := fun x => x.
Arguments f _%my_nat.

Check (f !1).

Ltac apply_f p := apply (f p).

Goal nat.
  Fail apply_f !1. (* How to define [apply_f] so that this succeeds? *)
  apply_f !1%my_nat.
Qed.
===============



Archive powered by MHonArc 2.6.19+.

Top of Page