coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: mukesh tiwari <mukeshtiwari.iiitm AT gmail.com>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Functions and equations
- Date: Sat, 4 Feb 2023 15:48:29 +0000
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mukeshtiwari.iiitm AT gmail.com; spf=Pass smtp.mailfrom=mukeshtiwari.iiitm AT gmail.com; spf=None smtp.helo=postmaster AT mail-lf1-f48.google.com
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:7ewpi67x4mKpgDNBywPXwPfXdLJyesId70hD6qkXc20sTiX4rb HWoB1/73XJYVkqKRQdcLy7Scu9qDbnhP1ICOoqXItKPjOW3FdARbsKheDfKn/bexEWndQtsp uIHZIObuEYzmIXsS852mSF+hobr+VvOZrHudvj
- Ironport-phdr: A9a23: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 RQPxrz8IMIYMYipgyRf
- Ironport-sdr: 63de7e5a_HfQ1dwVxViQVUt3IIspDgc8DO/325PIjtEm2woGl4BWQeKL TD9gxqWsg0uPNLdu9LXJ2yoR/OnrLyLXI/lhcfg==
Hi everyone,
This question piqued my curiosity because we can really write
dependent type programs cleanly using the Equations package. However,
I am curious how closely we can match the Equations solution in
(vanilla) Coq. Here is my effort [1] but I don't feel it's as clean as
the Equations solutions.
Best,
Mukesh
[1] https://gist.github.com/mukeshtiwari/12ed0d69f945e4b6fe5e7895e2665ae3.
On Fri, Feb 3, 2023 at 10:16 AM Sylvain Salvati
<sylvain.salvati AT labri.fr> wrote:
>
> Thanks for your answers. Actually, the motivation behind my question is
> to use the best tool in coq for teaching the notions of pre- and
> post-conditions, variants and so on. I like Function for this purpose as
> it limits the coq related technicalities. I was wondering whether
> Equations was giving the same comfort with respect to my pedagogic goals
> and as I really like the Haskellish syntax it adopts. Passing equality
> propositions around as the tutorial pointed by Yves suggests is what Ι
> would like to avoid.
>
> All the best,
>
> S.
>
> Théo Winterhalter <theo.winterhalter AT inria.fr> writes:
>
> > To complement Yves’s answer I would like to point out that this is not a
> > shortcoming of Equations vs Function or Program. Function or Program would
> > systematically use this kind of pattern (or the convoy pattern) to keep
> > the most
> > information in the obligations. However, when it is unnecessary it
> > pollutes the
> > terms so Equations gives you more control on which information you want
> > to keep
> > or not.
> >
> >> On 3 Feb 2023, at 09:32, Yves Bertot <yves.bertot AT inria.fr> wrote:
> >>
> >> Sorry for my previous answer in French, I thought I was answering only
> >> to Sylvain.
> >>
> >> Here is an example, that should correspond to Sylvain's need. I devised
> >> it by
> >> simply copying a few lines from
> >> https://github.com/mattam82/Coq-Equations/blob/aa0311a06c83f3644644d7db56bc230490751339/examples/Basics.v#L506,
> >>
> >> ======================================
> >> Require Import Arith.
> >> From Equations Require Import Equations.
> >>
> >> Definition inspect {A} (a : A) : {b | a = b} :=
> >> exist _ a eq_refl.
> >>
> >> Notation "x 'eqn:' p" := (exist _ x p) (only parsing, at level 20).
> >>
> >> Equations division (a b : nat) (p: 0 < b) : (nat*nat)%type by wf a lt :=
> >> division a b p with inspect (a <? b) => {
> >> | true eqn: _ => (0,a)
> >> | false eqn: cmp_eqn => let (q,r) := division (a - b) b p in
> >> (S q,r)
> >> }.
> >> Next Obligation.
> >> =======================================
> >> The next goal contains an extra assumption cmp_eqn, which should help
> >> finishing the proof.
> >>
> >> Yves
> >>
> >>
> >> ----- Original Message -----
> >>> From: "Sylvain Salvati" <sylvain.salvati AT univ-lille.fr>
> >>> To: "coq-club" <coq-club AT inria.fr>
> >>> Sent: Thursday, February 2, 2023 10:32:40 PM
> >>> Subject: [Coq-Club] Functions and equations
> >>
> >>> Dear Coq-Club,
> >>>
> >>> I have been trying the Equations module to define and prove simple
> >>> algorithms. When defining division by substraction, I have stumbled into
> >>> a difficulty (see code below). While with a definition based on
> >>> Function, the statement to prove termination uses the assumption that a
> >>> <? b = false, it is not the case with the Equation based definition. It
> >>> is a pity as it is then impossible to prove termination. I am wondering
> >>> whether there is some way to have Equations behave similarly to
> >>> Function.
> >>>
> >>> Cheers,
> >>>
> >>> S.
> >>>
> >>>
> >>>
> >>> Require Import Arith FunInd Recdef.
> >>> From Equations Require Import Equations.
> >>>
> >>> Function division (a b: nat) (p: 0 < b) {measure id a}: (nat*nat) :=
> >>> if a <? b
> >>> then (0,a)
> >>> else
> >>> let (q,r) := division (a - b) b p in
> >>> (S q,r).
> >>> Proof.
> >>> intros a b p_pos eq_test.
> >>> apply Nat.sub_lt ; trivial.
> >>> now rewrite Nat.ltb_ge in eq_test.
> >>> Defined.
> >>>
> >>>
> >>> Equations division (a b : nat) (p: 0 < b) : (nat*nat)%type by wf a lt :=
> >>> division a b p with a <? b => {
> >>> | true => (0,a)
> >>> | false => let (q,r) := division (a - b) b p in
> >>> (S q,r)
> >>> }.
> >>> Next Obligation.
>
- [Coq-Club] Functions and equations, Sylvain Salvati, 02/02/2023
- Re: [Coq-Club] Functions and equations, Yves Bertot, 02/03/2023
- Re: [Coq-Club] Functions and equations, Yves Bertot, 02/03/2023
- Re: [Coq-Club] Functions and equations, Théo Winterhalter, 02/03/2023
- Re: [Coq-Club] Functions and equations, Sylvain Salvati, 02/03/2023
- Re: [Coq-Club] Functions and equations, mukesh tiwari, 02/04/2023
- Re: [Coq-Club] Functions and equations, Sylvain Salvati, 02/03/2023
- Re: [Coq-Club] Functions and equations, Théo Winterhalter, 02/03/2023
Archive powered by MHonArc 2.6.19+.