coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Elias Castegren <elias.castegren AT it.uu.se>
- To: "coq-club AT inria.fr" <coq-club AT inria.fr>
- Subject: [Coq-Club] Termination checker rejecting equivalent functions
- Date: Wed, 6 Nov 2024 15:56:32 +0000
- Accept-language: sv-SE, en-US
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=elias.castegren AT it.uu.se; spf=Pass smtp.mailfrom=elias.castegren AT it.uu.se; spf=None smtp.helo=postmaster AT cursor.its.uu.se
- Ironport-data: A9a23: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 YT4qa6oja17pYPM/R5cRkNo
- Ironport-hdrordr: A9a23:ZNzE5K6821o8l6HZaQPXwDjXdLJyesId70hD6qkoc20sTiQB// re7cjzpiWE8wr5P0tQ6exoWZPwP080kKQejLX5Uo3SOjUO1FHYT72KjrGSsAEIeReOj9K1vJ 0IG8MQZryRMbEQt7ee3ODMKadG/DDxytHNuQ6x9QYOcShaL4Bp6gF/Tia3e3cbeOAMP+tCKH PV3Ls7m9OPQwVqUu2rQmUYG+TTrdzCk5zrJRgcBxAm72C1/EyV1II=
- Ironport-phdr: A9a23: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
- Ironport-sdr: 672b91b3_Wk1Y877HuY5IhIEc5SWMS4HjUhfPMy6y/PxpRKixPRumb8a 7KeWOaG+DWmfT5hP3Oe+1OFAR3V+vpaWFrS77Ww==
Hi all
I ran into an issue I don’t understand yesterday, minimised below:
I have a datatype where one constructor holds a list of recursive values:
Inductive foo :=
| Foo : foo
| Bar : list foo -> foo.
Sometimes I want to apply operations to values of this type, and then I
can use Coq’s standard map function to handle the Bar constructor:
Fixpoint op1 (x: foo) :=
match x with
| Foo => Foo
| Bar l => Bar (List.map op1 l)
end.
(* Compiles OK! *)
However, I am really using the TLC library and if I use the corresponding
map function the termination checker complains (the two functions have
the same type according to Check):
Fixpoint op2 (x: foo) :=
match x with
| Foo => Foo
| Bar l => Bar (LibList.map op2 l)
end.
(* Recursive call to op2 has principal argument equal to "x0"
instead of one of the following variables: "l" "l0".
Recursive definition is:
"fun x : foo =>
match x with
| Foo => Foo
| Bar l => Bar (map op2 l)
end".
*)
If I write a dedicated map function that is mutually recursive I get
the same error:
Fixpoint op3 (x: foo) :=
match x with
| Foo => Foo
| Bar l => Bar (myMap l)
end
with
myMap (l: list foo) :=
match l with
| nil => nil
| x :: xs => op3 x :: myMap xs
end.
(* Recursive call to op3 has principal argument equal to
"x" instead of "xs".
Recursive definition is:
"fun l : list foo =>
match l with
| nil => nil
| x :: xs => op3 x :: myMap xs
end".
*)
However, if I write a slightly less dedicated map function as a
mutually recursive function it works:
Fixpoint op4 (x: foo) :=
match x with
| Foo => Foo
| Bar l => Bar (myMap op4 l)
end
with myMap (f: foo -> foo) (l: list foo) :=
match l with
| nil => nil
| x :: xs => f x :: myMap f xs
end.
(* Compiles OK! *)
Strangely, even though this is not a true mutually recursive
definition, if I separate the two I get an error about the number
of arguments which doesn’t make sense to me:
Fixpoint myMap2 (f: foo -> foo) (l: list foo) :=
match l with
| nil => nil
| x :: xs => f x :: myMap2 f xs
end.
Fixpoint op5 (x: foo) :=
match x with
| Foo => Foo
| Bar l => Bar (myMap2 op5 l)
end.
(* Recursive call to op5 has not enough arguments.
Recursive definition is:
"fun x : foo =>
match x with
| Foo => Foo
| Bar l => Bar (myMap op5 l)
end".
*)
Any ideas of what is going on is greatly appreciated!
/Elias
När du har kontakt med oss på Uppsala universitet med e-post så innebär det
att vi behandlar dina personuppgifter. För att läsa mer om hur vi gör det kan
du läsa här: http://www.uu.se/om-uu/dataskydd-personuppgifter/
E-mailing Uppsala University means that we will process your personal data.
For more information on how this is performed, please read here:
http://www.uu.se/en/about-uu/data-protection-policy
- [Coq-Club] Termination checker rejecting equivalent functions, Elias Castegren, 11/06/2024
- Re: [Coq-Club] Termination checker rejecting equivalent functions, Dominique Larchey-Wendling, 11/06/2024
Archive powered by MHonArc 2.6.19+.