Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] what is firstorder supposed to do?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] what is firstorder supposed to do?


Chronological Thread 
  • From: Jonathan Leivent <jonikelee AT gmail.com>
  • To: Hugo Herbelin <Hugo.Herbelin AT inria.fr>, Coq Club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] what is firstorder supposed to do?
  • Date: Mon, 9 Nov 2015 21:01:51 -0500
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jonikelee AT gmail.com; spf=Pass smtp.mailfrom=jonikelee AT gmail.com; spf=None smtp.helo=postmaster AT mail-qg0-f48.google.com
  • Ironport-phdr: 9a23:pjAv2B8auymz//9uRHKM819IXTAuvvDOBiVQ1KB80ugcTK2v8tzYMVDF4r011RmSDdidt64P0LqempujcFJDyK7JiGoFfp1IWk1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXsq3G/pQQfBg/4fVIsYL+lR8iO04/sh6ibwN76XUZhvHKFe7R8LRG7/036l/I9ps9cEJs30QbDuXBSeu5blitCLFOXmAvgtI/rpMYwuwwZgf8q9tZBXKPmZOx4COUAVHV1e1wyse32uh6LbQaV7HYYU2NexjpVDA+DzBzgVJr1sy3St+xn2SDcM9egCfgfXi3qxKN2Qle8gyAecjU97Wv/i8pqjasdrgj39DJlxIuBQoaTPeZ+d6WVWd4bW2dHQo4FVStHA4Cxa4YCJ+UENOdc6YL6og1d/lOFGQCwCba3mXdzjXjs0Ph/irx5HA==



On 11/09/2015 03:56 PM, Jonathan Leivent wrote:



For example, I can come up with goals requiring forward chaining that firstorder solves quite readily, and others that it doesn't. Here's one it doesn't solve:

Goal forall (P : nat -> nat -> Prop),
(forall i j, P i j -> i + j < 2) ->
forall x y z, P x y -> P z y -> y > 0 -> x + z < 1.
Proof.
intros P R x y z Pxy Pyz ygt0.
Fail firstorder omega.

However, an extra level of firstorder does solve it:

firstorder (firstorder omega).

I think I see why, based on debugging the goals that are handed to the tactic arg (omega in this case), but I'm not sure. It looks like each level of firstorder will parameterize the R formula just once - and since omega requires both R x y : x + y < 1 and R x z : x + z < 1, two invocation levels of firstorder are needed. But, I don't know if this is generally the case. Could something like:

Ltac fo n tac := firstorder (tac || lazymatch n with S ?N => fo N tac end).

be used to solve any first-order goal, given sufficiently high n? If not, what are the properties that first-order goals have to have to be solvable this way?

I eventually noticed that "Set Firstorder Depth 4" enables it to solve this goal by just "firstorder omega".

-- Jonathan





Archive powered by MHonArc 2.6.18.

Top of Page