MetaCoq / metacoq

Metaprogramming, verified meta-theory and implementation of Coq in Coq
https://metacoq.github.io
MIT License
367 stars 79 forks source link

Implement tLazy and tForce in EAst #1058

Closed mattam82 closed 6 months ago

mattam82 commented 6 months ago

This add new term constructors to map to lazy and force in ocaml/malfunction or more naive thunks in other targets. This is now used in the unverified ECoInductiveToInductive phase. In coq-malfunction we can compile this to ocaml's implementation for an efficient implementation of coinductives and cofixpoints.

As these constructors are not produced by erasure, and we do NOT add evaluation rules for lazy/force, the correctness proofs do not change for the rest of the pipeline. It should just be considered unsafe to use lazy and force.