Skip to Content.
Sympa Menu

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

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[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: [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;
    }.

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