Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Regarding the performance of an extracted OCaml code from a Coq formalisation

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Regarding the performance of an extracted OCaml code from a Coq formalisation


Chronological Thread 
  • From: Jim Fehrle <jim.fehrle AT gmail.com>
  • To: coq-club AT inria.fr
  • Cc: xavier.leroy AT college-de-france.fr
  • Subject: Re: [Coq-Club] Regarding the performance of an extracted OCaml code from a Coq formalisation
  • Date: Tue, 16 Apr 2024 12:40:22 -0700
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jim.fehrle AT gmail.com; spf=Pass smtp.mailfrom=jim.fehrle AT gmail.com; spf=None smtp.helo=postmaster AT mail-ed1-f53.google.com
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:nFJkOKzQFEYwAb1WRzOqKrPwE71zdoMgy1knxilNoNJuA7Wlfq GV7YwmPHrP4gr5N0tQ/OxoVJPwI080sKQFgrX5Xo3CYOCFghrNEGgK1+KLqAEIWRefygc379 YGT0ERMqyXMbG4t6rHCcuDfurIDOPpzElgv4nj80s=
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 661ed433_pfqwiGD/QqhQAkOVyQ1NI0e/EK+EsOBIUjtJjzeCPB58l5l Wg8yN9hP6mjMhW/uqafrqjia3CeK9Fng5ukkJ5A==

Is it possible to encode the matrix as an array of arrays?

On Tue, Apr 16, 2024 at 9:34 AM mukesh tiwari <mukeshtiwari.iiitm AT gmail.com> wrote:
Hi everyone,

I am wondering if the performance of an OCaml code --extracted from a Coq formalisation-- would be different if a matrix data structure is modelled as a function type compared to a list of lists? During formalisations if it involves matrices, I assume them as a function type (A -> B -> C for finite type A and B) than a list of lists. Function type is nice for reasoning about correctness proofs, but when I extract OCaml code from the formlisation and need to call an OCaml function from main.ml, I create a function type (see the definition of mat below) at main.ml and pass it to the OCaml function. Another way I can achieve the same functionality is to create the matrix as a list of lists in main.ml and then use a search function that turns the list of lists into a function type (see the example fnmat). Below I have provided an OCaml code but it can also be implemented in Coq, although it may require some effort. Now the question is does it matter to the OCaml compiler?  I would also appreciate it if you know of any formalisations about matrix multiplication in Coq and could post them here.


Best,
Mukesh

(* function type *)
let mat (x : coq_Node) (y : coq_Node) : coq_RR = 
  match x, y with
  | A, A -> oneRR
  | A, B -> (Left 3, Left 5) 
  | B, A -> zeroRR 
  | A, C -> (Left 5, Left 4)
  | C, A -> zeroRR 
  | B, B -> oneRR
  | B, C -> (Left 2, Left 10) 
  | C, B -> zeroRR 
  | C, C -> oneRR  

(* Another way to encode the matrix mat *)
let listmat : (coq_Node * ((coq_Node * coq_RR) list)) list =
  [(A, [(A, oneRR); (B, (Left 3, Left 5)); (C, (Left 5, Left 4))]);
   (B, [(A, zeroRR); (B, oneRR); (C,  (Left 2, Left 10))]);
   (C, [(A, zeroRR); (B, zeroRR); (C, oneRR)])]

(* turn it into a function type *) let fnmat : coq_Node -> coq_Node -> coq_RR = fun (x : coq_Node) -> fun (y : coq_Node) -> List.assoc y (List.assoc x listmat)



Archive powered by MHonArc 2.6.19+.

Top of Page