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: Jason -Zhong Sheng- Hu <fdhzs2010 AT hotmail.com>
  • To: "coq-club AT inria.fr" <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] How do I define Fixpoints on Records?
  • Date: Tue, 2 Jun 2020 15:53:08 +0000
  • Accept-language: en-CA, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xjCmfd56Xb66eyGpDtTAfbITcl4BaL/qcYEzPDFxQUA=; b=jBRYZaNYtP3JVNa6uB2XEod9TFxuHdg3FGM1+SNCSKzB3S88lT9fKMuPCaTTBOmqF/ZudVZg7lrxCOmvzx28OQhGAIiXVZ8EA8jtjU2IlgTr/HsNbJMri1TrZ/yFKHpQxu6QwnXdOv/YFl6UK663c29+ii7fIXtNqBOrbSizZdzg8DYWehyd8eeEGFGvs5hDHK2mMeifhYLSaK2pGD3WlLsuAXMbeMgYRF/f/3aqpKe7Ds13apRrlxKXf4oZw3c6xTBtUijH8UHbTRcYT8LH1WO9w7472XWeJ/6b+chpSQuj+XyYy6Bz1jcGI7lk+BAbq4vX5Wnb3ciaRF8Xk9ddSA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LcQl7Eof90N66CHrJPTIHFNEEuAdU1VYSfBwm2zrmaL1XQlOjTvLf/rhXhHcke3peKGiAI89JtBXsWn26Cd9ya0ZWthHZCudzHfp5cUm/cI1QaNU5Po6pVEDHRGlNvkZF2DXmCOIRHtaVNd9vJVsOCfGHL9mkVtNYHRkilAZrQw4bHYX3PJzVt1Rkp6iMmbqK1/wJfe2EPbh4DXQM4ioDwqyUMGz4ggMl3nKkBBTJSyKO8oaVMui/Qopu7zlKtljr7IRb2P7i6JpNJxDSymJkqfkVXUTJaUR9E9hs44no/ohoI3UMwQQ+1YjsEmIcz2JoBDBfxO2lGnj/52xeDIQdw==
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=fdhzs2010 AT hotmail.com; spf=Pass smtp.mailfrom=fdhzs2010 AT hotmail.com; spf=Pass smtp.helo=postmaster AT NAM10-BN7-obe.outbound.protection.outlook.com
  • Ironport-phdr: 9a23:F5dw+BQH14wNJJlC0F9hK/o/Idpsv+yvbD5Q0YIujvd0So/mwa67ZBSOt8tkgFKBZ4jH8fUM07OQ7/m9HzVbvt3e6DgrS99lb1c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrrQjdrNQajIVgJ6o+yBbFvmZDdvhLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfMTQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklDsLOjgk+27Ql8JwkblboAq/qBNj347aboaVNP9kcaPce9MRWG5NU8lVWiBEBI63cokBAPcbPetAr4fzuUYArQewCwevCuPgyCNHiXDt0KIgz+gtDRvL0BA8E94QtnnfsdX7NL0VUeCw1KTGyS/Mb+hR2Tf79YPEaxMuofGLXbJ2fsra1FQhFwPbgVWWpozpJi6e2OYQs2OG6OdgW/+gi24mqgFqvDSj2toghpXSi4IVzVDE6SB5z5w0Jd28UkJ0fdmkEJ5JuiycKoB5Td8sTXtytyYm1r0Jp4S7fC4SxZk7xxPSaOGKfomV7xzjVuucLjl2iG57dbywmxq/8keux+3yWMS231hHoCRInsfRu30M1hHe68mKRPVy80qlxTuC0R3Y5O9DIUAxj6XbKpghz6Y/lpoSrUTDHjL2l17sgK+XcUUp/PWj5ef/Yrj+qZKQK5V4hwXgPqg0lcGzHf40PwsPUmSD5+izzqHv8VD8TblXk/E6j6zUv47VKMgHuqK0Bg1Y3Zgg5hu9Cjqr1dsVkHsBIVlYYhyIlZLpNEvLIP3gDfewnVCskDBzyv7eIrDvBYjBImTanLr8Zbhw6VdQyA0owt9B/Z5UDawBIO7oVU/2qdzYCAI2Pxasw+b9D9V9yp0RVn6TAq+YN6PSt0WE5uUyI+mQYI8VvzH9K/s/6/Hyin85nEcRfaiv3ZQJdHC1BvtrL1mDbXfonNsNC2gHshYkQOHpiVCOSTtTaGyzX6I46DE7EoWmDYLbS4CjnbOB3Ca6HoZIamxaF1yADWzld4WDW/cQbSKdOM5hkjgeWbe9TI8h0AmitBXmxLp/MurU5ioYuIr/29hy/u3fjA099ThpD8uGyGyNVGF1nmYQRzAsxqx/oEp9yk2C0adimfBYG8ZTtLt1VVJwPpnFiud+FtraWwTbf97PRkzsCoGtBih0RdYsyfcPZVx8EpOslEaQ8TCtBuo3nqeMAtRxwKLb2Xe5HMZwzXmDnIk8xw0oTstdLjf+3/ZX9w/PAofIlwOSkKP8JvdU5zLE6GrWlTnGh0pfSgMlDfScASIvI3DOpNG83XvsCqe0AO18YAtG1cuLK68MYdrs3w0fGaXTfe/Gamf0oF+eQBaFwrTQM9jMUkBEhGD3LhdBlAoeu3GbKQI5GyGt5XrECyBjHk7uZEWq9vRirHS8TQk/yATYNhQwhYrwwQYcgLmnc91W27sFvCk7rDAtRwS92M7TAtuE4QFmefcFbA==

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.

Thanks,
Jason Hu

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