coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- 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.
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?
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;
}.
{
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.
match (rr qq) with
| (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
- [Coq-Club] How do I define Fixpoints on Records?, Agnishom Chattopadhyay, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Jason -Zhong Sheng- Hu, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Agnishom Chattopadhyay, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Jason -Zhong Sheng- Hu, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Agnishom Chattopadhyay, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Dominique Larchey-Wendling, 06/02/2020
- Re: [Coq-Club] How do I define Fixpoints on Records?, Jason -Zhong Sheng- Hu, 06/02/2020
Archive powered by MHonArc 2.6.19+.