coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Mario Frank <mafrank AT uni-potsdam.de>
- To: coq-club AT inria.fr
- Cc: Joomy Korkut <joomy AT princeton.edu>
- Subject: Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq
- Date: Mon, 9 Oct 2023 16:16:23 +0200
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mafrank AT uni-potsdam.de; spf=Pass smtp.mailfrom=mafrank AT uni-potsdam.de; spf=None smtp.helo=postmaster AT cl-mail.uni-potsdam.de
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:DgxTXqmkDd1TvRos2AQfQMcLy/PpDfL03DAbv31ZSRFFG/FwWf re/sjzpiWVtN9xYhsdcL+7VJVoLUmskaKdpLNhWotKPzOIhILLFuxfBOLZqlWKJ8S9zJ856U 4KSclD4bPLfDtHZIrBjjWQIpIFwNyb/LuliI7lvhFQZDAvaOVr7gV8AgafVmFwWwVCA4MhGP Onl7N6mwY=
- Ironport-phdr: A9a23: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 H1kdF9WorSVqy9V0KwXJg==
- Ironport-sdr: 65240b3a_WNb8KkzFGqs8rfDQQg/bb1hotzr9IBvM3m3Rd2Gq7yKlXl0 9SarCxyeBtWCpbwVsvEK/brBHi6oBAH3/7XWOmw==
Dear Andrew and Joomy,
thank you for forwarding my eMail and also, many thanks for clarifying this.
The version of CertiCoq I use already generates the glue files. I just did not
know how to use them properly. Getting the result from the closure works
like a charm now.
I just still seem to provide the values to the closure in a wrong fashion.
But I think the purpose of my question is achieved for now, since I wanted
to make a proof of concept.
Best Regards,
Mario
Am 07.10.23 um 16:34 schrieb Andrew
Appel:
Joomy Korkut writes,
For some reason I did not receive Mario Frank's email
about CertiCoq even though I'm subscribed to coq-club.
Here's my response:
Suppose your Coq code looks like this:
```
Definition coq_fun (val1 : nat) (val2 : nat) (val3 : Z)
(val4 : nat) : Z := ...
```
On the Coq side, you can compile your function and
generate glue code with these two commands:
```
CertiCoq Compile coq_fun.
CertiCoq Generate Glue -file "glue" [ Z, nat ].
```
This generates a C and a header file for your program
(named based on the module path) and the glue code (here
it's named glue.{c,h}).
Now, keep in mind that the compiled Coq code produces a
closure when `body` is called on the C side. In your case,
it's a closure for a curried function that takes 4
arguments. You can use the `call` function in the glue code
to call it. I see that you're trying to inspect the result,
but `Int_val` doesn't achieve that. You have to use the glue
functions for that as well.
If you're trying to check whether the result of coq_fun
is -1 (that is `Zneg xH` in Coq), you would have to write
the code below for that:
```
#include "gc.h"
typedef enum { Z0, ZPOS, ZNEG } tag_Z;
typedef enum { XI, XO, XH } tag_positive;
int my_fun(value val1, value val2, value val3, value
val4)
{
struct thread_info *ti = make_tinfo();
value tmp = body(ti);
tmp = call(ti, tmp, val1);
tmp = call(ti, tmp, val2);
tmp = call(ti, tmp, val3);
tmp = call(ti, tmp, val4);
switch (get_Coq_Numbers_BinNums_Z_tag(tmp)) {
case ZNEG:
return
(get_Coq_Numbers_BinNums_positive_tag(get_args(tmp)[0]) ==
XH ? -1 : 0);
default:
return 0;
}
}
```
(though keep in mind that make_tinfo can fail, it
currently doesn't return a null pointer when it fails to
malloc. But maybe it should do that.)
(You should link gc_stack.c when you're compiling, such
as `gcc -g -o prog main.c gc_stack.c prog.prog.c glue.c`)
For more examples (with actual primitives), you can look
at our repo's (github.com/CertiCoq/VeriFFI) examples folder.
We're currently writing a paper on this, so there should be
better documentation soon.
- Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq, Andrew Appel, 10/07/2023
- Re: [Coq-Club] [Extern]Re: Interfacing C with code synthesised by CertiCoq, Mario Frank, 10/09/2023
Archive powered by MHonArc 2.6.19+.