coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Gaëtan Gilbert <gaetan.gilbert AT skyskimmer.net>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Theorems as Fixpoints
- Date: Fri, 3 May 2024 09:16:36 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=gaetan.gilbert AT skyskimmer.net; spf=Pass smtp.mailfrom=gaetan.gilbert AT skyskimmer.net; spf=Pass smtp.helo=postmaster AT relay7-d.mail.gandi.net
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:JZ/Yh6sQQ87jrmmaa3bfW4bR7skDRdV00zEX/kB9WHVpm7+j9/ xG+85rsyMc6QxhP03I/OrrBEDuex/hHPJOkOws1PKZLW3bUQiTQ72Kj7GO/9SIIUSXndK1l5 0QEZSWY+eQMbEVt7eY3OD1Kbgd6ejC3oeEwd3X1XIFd3ASV51d
- Ironport-phdr: A9a23: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
- Ironport-sdr: 66348f57_xrtmrLdN1hU3TFkoF1jsLJi6zn+TkrOUqDx9Ce4py6FAppr WrxgPrubpQHVYOsEDVGKx7uarY/Cte3R/AtDeUw==
1.
https://coq.inria.fr/doc/master/refman/proofs/writing-proofs/reasoning-inductives.html#coq:tacn.fix
used like
Lemma double : nat -> nat.
Proof. fix double 1. intros [|n];[exact 0|exact (S (S (foo n)))]. Defined.
2. the root of the proof is not visible to tactics, they only know about the
current goals. So they cannot check guardedness.
Gaëtan Gilbert
On 03/05/2024 08:28, Elias Castegren wrote:
Dear all
While investigating writing custom induction principles
I figured out that an alternative solution is to write your
theorems as Fixpoints (questions below).
For example, take this definition of a Rose tree where
the generated induction principle is unhelpful:
Inductive rose_tree (A: Type) :=
| Node (elem: A) (children: list (rose_tree A)).
Check rose_tree_ind.
(*
rose_tree_ind
: forall (A : Type) (P : rose_tree A -> Prop),
(forall (elem : A) (children : list (rose_tree A)),
P (Node A elem children)) ->
forall r : rose_tree A, P r
*)
Trying to prove for example that a convoluted identity
function is indeed an identity function fails almost
immediately:
Fixpoint rebuild (A: Type) (t: rose_tree A) :=
match t with
| Node _ elem children => Node A elem (map (rebuild A) children)
end.
Theorem rebuild_id:
forall A t,
rebuild A t = t.
Proof.
intros A t.
induction t. (* No induction hypothesis generated *)
Abort.
Now, the standard solution to this is to write a custom
induction principle that recurses through the list (or something
using well-founded induction), but you can also prove the
theorem directly by formulating it as a Fixpoint:
Fixpoint rebuild_id (A: Type) (t: rose_tree A):
rebuild A t = t.
Proof with auto.
destruct t. simpl.
f_equal. induction children...
simpl. rewrite rebuild_id'.
rewrite IHchildren...
Qed.
I was pleasantly surprised by this since I have always found
writing induction principles quite tedious, especially for larger
data types. An obvious drawback of this is that automation
tends to be very eager to use the theorem recursively too
early, creating a non-terminating proof object.
So, to my questions:
1. Is there a tactic that I can use in the proof of a regular
Theorem that turns it into a fixpoint so that I don’t have to
write the theorem statement differently? Note that writing
"Fixpoint rebuild_id: forall A t, rebuild A t = t” fails with an
uncaught exception at the moment.
2. Is there a version of auto that checks guardedness and
backtracks if it fails? What I want is something like
“try solve[auto; Guarded]”, but it seems like Guarded is a
command rather than a tactic so that they don’t compose
(also I guess solve would stop once auto solved the goal?)
Maybe there are other tricks one can employ to solve the
same problem? My goto solution is using well-founded
induction over some size measure, but it always involves
some boilerplate that would be nice to avoid.
Cheers
/Elias
När du har kontakt med oss på Uppsala universitet med e-post så innebär det
att vi behandlar dina personuppgifter. För att läsa mer om hur vi gör det kan
du läsa här: http://www.uu.se/om-uu/dataskydd-personuppgifter/
E-mailing Uppsala University means that we will process your personal data.
For more information on how this is performed, please read here:
http://www.uu.se/en/about-uu/data-protection-policy
- [Coq-Club] Theorems as Fixpoints, Elias Castegren, 05/03/2024
- Re: [Coq-Club] Theorems as Fixpoints, Gaëtan Gilbert, 05/03/2024
- Re: [Coq-Club] Theorems as Fixpoints, Pierre Courtieu, 05/03/2024
- Re: [Coq-Club] Theorems as Fixpoints, Dominique Larchey-Wendling, 05/03/2024
- Re: [Coq-Club] Theorems as Fixpoints, mukesh tiwari, 05/03/2024
Archive powered by MHonArc 2.6.19+.