Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Doing something n times with backgtracking

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Doing something n times with backgtracking


Chronological Thread 
  • From: Maximilian Wuttke <s8mawutt AT stud.uni-saarland.de>
  • To: coq-club AT inria.fr, Joey Eremondi <joey.eremondi AT gmail.com>
  • Subject: Re: [Coq-Club] Doing something n times with backgtracking
  • Date: Sun, 19 Aug 2018 01:05:22 +0200
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=s8mawutt AT stud.uni-saarland.de; spf=None smtp.mailfrom=s8mawutt AT stud.uni-saarland.de; spf=None smtp.helo=postmaster AT triton.rz.uni-saarland.de
  • Autocrypt: addr=s8mawutt AT stud.uni-saarland.de; keydata=mQINBFWVkZsBEADmp2Mq5 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
  • Ironport-phdr: 9a23:NPSBdhQHlgv7aT+U4RlKJ95P0tpsv+yvbD5Q0YIujvd0So/mwa6zZRWN2/xhgRfzUJnB7Loc0qyK6/6mATRIyK3CmUhKSIZLWR4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+KPjrFY7OlcS30P2594HObwlSizexfbJ/IA+qoQnNq8IbnZZsJqEtxxXTv3BGYf5WxWRmJVKSmxbz+MK994N9/ipTpvws6ddOXb31cKokQ7NYCi8mM30u683wqRbDVwqP6WACXWgQjxFFHhLK7BD+Xpf2ryv6qu9w0zSUMMHqUbw5Xymp4rx1QxH0ligIKz858HnWisNuiqJbvAmhrAF7z4LNfY2ZKOZycqbbcNgHR2ROQ9xRWjRPDIyybYQPAeUOMvpXoYfguVUArRiwCBK2C+7tzz9FnGP60Lc43uknDArI3BYgH9ULsHnMq9v6LqgTUeGwzKnJyTXDbulZ2THg44fIbxAhve2MXbFufsHMzkQvDADIjlCKpo3rIjOVyvgNvnOA7+p8SOKglnQrqxx3ojiu38sskZPGiZgPylDA7yp5xps6KcelR0FleNOpFoZbuS+dN4tzWMwiQmdotT4hyr0ao5G0YCsKyJM5xxHBcfyHfYyI4hXtVeqLPTh4g3dldbSijBix6Uit0vDwW8e73VpQqidIk8PAu3IX2xDN6sWLUuZx80mu1DqV0w3e6/tILEE0mKbBL5MsxKM7mIAJvkTZBCD2nV37jK+IeUUg/eil8/jnYq/npp+AMI90jBvyMr4vm8ClHOQ4NAkOU3GA+eumzrLj50n5T69MjvIriKXWrY7VKdwapq6/HQBVzp4u5wuxAjqpytgVmXgKIEhHdR6dkYTkO0nCIPXiAve+h1Ssni1rx/fDPrD5GZXALX3Dn63vfLZg905c1BE+zctD55JJF74NOu/zWknwtNDBFR82KRa7w/zjCNpn0IMRRHiDDbKHP6/Kq1+H+vovI/WQZI8SoDvyN/8l5+f3gXAlnV8dYLKm0IAMaHG4G/RmO1+WbWDtgtcHC2cKvxAxQPbkiF2YAnZvYCO5WLt57TUmAqqnC53CT8ajmvjJ/iC2D9V7fG1DDVaAED+8dYKJSrEBci+XJcltkxQLULGgT8kq0hT45yHgzL8yC+PE+ygZsZPq0pBK+vHPlhx6oSckCs2Czn2RZ3pog29OWjk3mbt2qFZ5w1GPl6R11a8LXedP7u9EB19pfaXXyPZ3XpWrAlqYL4W5DW2+S9DjOgkfC9c4wtsAeUF4QY/wlQze02y3Bb5QjLWCHpg99K6a03Wjf58hmUaD77EoihwdeuUKLXev3PQt7BTOC8jUlUTcjK+jb6AV2iKL+GrRlTPT7nEdaxZ5VOD+ZV5aZkbSqo6mtF/YTqOpD/I9IE1cz8/HMaJDcNngi1kASPqxYNk=

Hi Joey,


You can try to do recursion on a Coq number in Ltac:

~~~~
Ltac find_specialize_in H n :=
lazymatch n with
| 0 => idtac
| S ?n' =>
match goal with
| [ v : _ |- _ ] => specialize (H v); find_specialize_in H n'
end
end.

Goal forall (T:Type) (P: T -> Prop) (y:T) (H : forall (x:T), x=y -> P x) (x1 : T) (x2 : T) (Heq : x1 = y), P x1.
Proof.
intros. now find_specialize_in H 2.
Qed.
~~~~

This is equivalent to `find_specialize_in H; find_specialize_in H` (with your version using multimatch).
Note that I replaced the multimatch with match.
This works, because when the recursive tactical call fails, the match backtracks (i.e. chooses another `v`).
If you want something like `find_specialize_in H 1; find_specialize_in H 1` to work, you can again replace the `match` with `multimatch`.

Note that the second argument of the tactic (i.e. the number of repeats), is an actual Coq term.
For example, the `lazymatch` fails if you call `find_specialize_in H true`.


Sincerely
Maximilian

On August 19, 2018 12:34:05 AM GMT+02:00, Joey Eremondi <joey.eremondi AT gmail.com> wrote:

Suppose I have a tactic like this (taken from HaysTac), that searches for an argument to specialize a particular hypothesis with:

    Ltac find_specialize_in H :=
      multimatch goal with
      | [ v : _ |- _ ] => specialize (H v)
    end.

However, I'd like to write a tactic that searches for `n` arguments to specialize a tactic with. The key is that it needs to backtrack. For example, if I have the following hypotheses:

    y : T
    H : forall (x : T), x = y -> P x
    x1 : T
    x2 : T
    Heq : x1 = y

If I write `do 2 (find_specialize_in H)`, it might choose `x2` to instantiate it, then fail trying to find a second argument. So I need my repeat loop to be able to backtrack with which arguments it chooses to specialize earlier arguments.

Is it possible to do this? How can I make a tactic loop that backtracks with its choices of previous iterations?

Thanks,

Joey


--
Sent from my Android device with K-9 Mail.


Archive powered by MHonArc 2.6.18.

Top of Page