coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Elias Castegren <elias.castegren AT it.uu.se>
- To: "coq-club AT inria.fr" <coq-club AT inria.fr>
- Subject: [Coq-Club] Theorems as Fixpoints
- Date: Fri, 3 May 2024 06:28:34 +0000
- Accept-language: sv-SE, en-US
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=elias.castegren AT it.uu.se; spf=Pass smtp.mailfrom=elias.castegren AT it.uu.se; spf=None smtp.helo=postmaster AT cursorius.its.uu.se
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:pgxs/aN9ydJVecBcTjGjsMiBIKoaSvp037By7TEIdfTMGvbo5v xG785rriMc7wxhKE3I+OrwRpVoJEm3mKKdjrNhW4tKMDOW21dAT7sSnrcKoQeQYhEWn9Q1vc wOHckfNDSaNykesS+O2njeLz9W+qjizEnHv5a9815dCSBjbqdmqydVYzz2LqQ8fng9OXNwLu vg2iNonUvdRV0HKtimQnUVVenKoNPG0JT8YRAHAHccmXazsQ8=
- Ironport-phdr: A9a23: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
- Ironport-sdr: 6634844c_tjU7NqaMMItOpotcaq8kEZHoHJ/s7xxjCRbr3XmScZ/Orqa dkoI2kP/+NlwbgvsJudWRgmLEd3w5WD8wpKFRrQ==
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+.