A Coq library providing Haskell-like definitions and notations for formalizing Haskell types and functions in Coq.
coq-haskell is a Coq library that provides Haskell-like definitions and notations to help Haskell developers formalize their types and functions in Coq. It enables users to prototype, prove, and extract algorithms from Coq to Haskell, bridging the gap between the two languages. The library is designed to make Coq's Gallina language more familiar to those accustomed to Haskell syntax and concepts.
Haskell developers who are using Coq for formal verification, theorem proving, or code extraction to Haskell. It is also suitable for researchers or engineers prototyping algorithms in Coq with the intent of implementing them in Haskell.
Developers choose coq-haskell because it reduces the learning curve when moving from Haskell to Coq, providing familiar terminology and constructs. Its integration with ssreflect and careful design for extraction (e.g., via `Yoneda`) ensures practical usability for real-world verification and code generation tasks.
A library for formalizing Haskell types and functions in Coq
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides aliases for common Haskell functions and types in Coq, such as using `a + b` with constructors `inl` and `inr`, making Gallina more accessible without enforcing exact syntax.
Enables the use of Haskell monads in Coq via `Yoneda m a`, specifically designed to handle Coq's extraction requirements for generating verified Haskell code, as highlighted in the README.
Built on the ssreflect library, minimizing reliance on the Coq standard library and potentially improving proof automation and efficiency for users familiar with ssreflect.
Reduces the learning curve by using familiar Haskell terminology and constructs, helping developers prototype and prove algorithms in Coq more easily, as stated in the project philosophy.
Does not aim to replicate Haskell syntax precisely, requiring users to adapt to Coq's native notations and constructs, which can still pose a learning hurdle despite the familiarity.
Heavily relies on the ssreflect library, so projects not already using ssreflect may face integration challenges or need to adopt it, adding complexity to the setup.
The need to use `Yoneda m a` for monads adds an extra layer of abstraction and complexity during extraction, which might be non-intuitive for developers new to Coq's extraction machinery.