coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Agnishom Chattopadhyay <agnishom AT cmi.ac.in>
- To: coq-club AT inria.fr
- Subject: [Coq-Club] How do I define Fixpoints on Records?
- Date: Tue, 2 Jun 2020 10:49:04 -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:x7df+hXfIeq0wW8fGo7G498Y/PnV8LGtZVwlr6E/grcLSJyIuqrYbBaCt8tkgFKBZ4jH8fUM07OQ7/m9HzVbvt3e6DgrS99lb1c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrrQjdrNQajIVgJ6o+yBbFvmZDdvhLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfMTQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklDsLOjgk+2zRl8d+jr9UoAi5qhNww4DaboKbOudgcKzBZt4VX3ZNU9xLWiBdHo+xbY0CBPcBM+ZCqIn9okMDoAexBQmqBePv0T9Ihnjz3aYnzekhERvJ3BA8H9IJqHTbtsj6NKcSUO+vzKjD0DLOYOlZ2Tf76YjIaRAhofaJXb9rbcXRzEgvGxnfgVqMs4DlPjWV2/0LvmOG4OVuSfihhHQ7qwFtvDev3MEsh5HHiI4L11zJ+jl0zJo6K9CmVUJ1btGpHIdUuiyaN4Z6XN4vT390tCsmzrAIt5y2cSYWxZkkxBPTdv2KfoqG7x/nUuuaPDR2hGp9db6imhq/8VKsxvPzW8S3ylpGsDdJnsPRun0OyxDf8taLRud580u72juC1xrf5vxFLE01j6bXNpwsz702m5EOq0rMBDX2l1/zjKKOdkUr5Oyo6+P/b7XjvJCcNot0hhviPaQrm8yzG/43PRQUU2ia/+SwzLzj/UvnT7VWlvA6j7TVvZDAKcgFqaO0ABVZ3pg+5xqlEjur08gUkWECLF1feRKHi4bpO0vJIPD9FfqwmVuskDFqx/DdPr3hBZDNI2Pfn7fkfLZx8VRTxxYpwdBe4ZJYEqsBL+7rWk/tqNzYCQc0PBCzw+b+EdlyyoceWX+UDaKCK6PTsVqI5vo1LOWWZY8Vviz9K/k/6PL0g385gwxVQa781pwOLXu8A/5OIkODYHOqjM1SP30Nu18XQ+rrk12FVHZ4Z3+uQ6Uk7z07GYu3RdPKSYasm7yG2Q+wG5wQb2sAC1baQiSgTJmNR/pZMHHaGcRmiDFRDeH8Gb9k7gmnsUrB85QiLufQ/XRG55fq1dwz7OjS0xg5sz1yXZzEjzO9Clpsl2ZNfAcYmbhlqBUkmFyG0O5xiLpZE44LvqIbYkIBLZfZitdCJZX3UwPFcM2OTQ//EN6jAHc4RZQwxY1Xbg==
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+.