Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] How do I define Fixpoints on Records?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] How do I define Fixpoints on Records?


Chronological Thread 
  • From: Agnishom Chattopadhyay <agnishom AT cmi.ac.in>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] How do I define Fixpoints on Records?
  • Date: Tue, 2 Jun 2020 11:01:00 -0500
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=agnishom AT cmi.ac.in; spf=Pass smtp.mailfrom=agnishom AT cmi.ac.in; spf=None smtp.helo=postmaster AT mail.cmi.ac.in
  • Ironport-phdr: 9a23:R0xfjxElfRTSe1wKhcDBmp1GYnF86YWxBRYc798ds5kLTJ7yp86wAkXT6L1XgUPTWs2DsrQY0reQ6vu/EjNYqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba5yIRmssAncuMsbjYRgJ6ot1xDEvmZGd+NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG4p6sLrswLDTRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Uims4qt3VBPljjoMODkk/mHKkcxwlLxUrw69pxJxxI7UZZuaNPt4fqjAed8XSm5MUsNXWidcAI2zcpEPAvIOMuZWrYbzp1UAoxijCweyGOzi0SVHimPs0KAgz+gtDQPL0Qo9FNwOqnTUq9D1Ob8OXOC6yqnIzC7Db/NR2Tf49YPFbBAhruuQXbJsdsrR0VMgGB7FjlSQs4PkPy6e2+MXvGiU6epgVPmvi24gqwF0uTWg2sIsiojTio0P1l/I7yR5wIAsKNC+VUV0bsKqHoFKuCGGK4t5XNkiQ2dwtSg01rAItp22cDUXxZg7yBPTd+KKfouG7B/nVeucJSp1iXxhdb+jmxu/81Wtx+L4W8S031tHrSRIn8XCuH0CyhHe7NWMRPV6/kekwzmP1gbT5/lLIUA1iarbK4MhzaUqmpoStkTOGDL9lkbujKKOa0ko5+il5/75brjppZKQLZF4hhzkPqgzmcGzHfw0PhYSU2Wf4+ix173u8VfkTLhLj/A6iKnUvI3cKM8GvKC2GRVV3Zwm6xunDzepztAYnX4fIVJAYh2HjozpN0vSL/D9DPezmU6jnytxy/DHOL3tGpTNLn7dn7f9Zbtx9lNQxQopwdxB6J9ZCasNLOzuVkPrqdDVDQM1PxSxw+n9CdV90o0eWXiIAq+cKK7dq1CI5uQuI+mXZI8VvzP9JuM56P7rjH81g0UScrWz0ZsWbnC0Bu5mLFmBYXrwntcBFn8HsRY5TOzzkVGNTTpTZ2upUK8n/TE6CIemDZ/ZSYy3gbyB2j27HpxMaWxcBFCMCySgS4LRUPAVLSmWP8VJkzoeVLHnRZVy+wupsVrTxLxmNerT/2UztZv/yN9t7uHThBgjvWh9AMKcyGGKSkl/m2JOTjRw3aYp8h818UuKzaUt268QLtdU/f4cDlZjZMzsitdiAtW3YTrvO9KASVKoWNKjWGhjRdcwhdYFJUd7SYz70kLzmhGyCrpQrISlQYQu+/uFjXP0JoB0wDDH0vt51gR0co50LWSjw5VH2U3TCorOyhvLkq+rceIX2S+L/WzFzGzc5Ew=

Thanks for the quick response!

Can you point me to some documentation for `_equation` or the "Equations" library? I could find the relevant equation by running `Search "equation"` but the documentation I can find does not explain a lot.

On Tue, Jun 2, 2020 at 10:53 AM Jason -Zhong Sheng- Hu <fdhzs2010 AT hotmail.com> wrote:
I believe Function provides `_equation` for you to rewrite.

if you can argue termination, Equations is a much more powerful and flexible solution. Equations has a funelim tactic which allows you to reduce functions in proof mode.

From: coq-club-request AT inria.fr <coq-club-request AT inria.fr> on behalf of Agnishom Chattopadhyay <agnishom AT cmi.ac.in>
Sent: June 2, 2020 11:49 AM
To: coq-club AT inria.fr <coq-club AT inria.fr>
Subject: [Coq-Club] How do I define Fixpoints on Records?
 
Hi;

I have a record like this:

Record aggQueue : Type :=
    {
       ff : list B;
       ffA : list B;
       rr : list B;
       rrA : list B;
    }.

I want to define some kind of function on it, like this:

Fixpoint aggFlip (qq : aggQueue)  : aggQueue :=
    match (rr qq) with
    | [] => qq
    | (r :: rs) =>
      aggFlip {|
        ff := r :: (ff qq);
        ffA := (op r (aggff)) :: (ffA qq);
        rr := rs;
        rrA := tl (rrA qq)
      |}
    end.

When I try to define a function on a type expressed as a Record using a standard `Fixpoint` definition, Coq complains that the underlying data type is not recursive inductive.

One way to get around this problem seems to be to use the Function construct. However, when I do so, I cannot prove anything useful about the defined function because when I unfold it inside a proof it is terribly obscured by the surrounding proof terms.

Is there a way to do this cleanly?

--Agnishom



Archive powered by MHonArc 2.6.19+.

Top of Page