@hackage / equational-reasoning

Proof assistant for Haskell using DataKinds & PolyKinds

Latest0.7.1.0

About

Metadata

  • Last updated , by HiromiIshii
  • License BSD-3-Clause
  • Categories Mathematics
  • Maintained by: konn.jinro_at_gmail.com

  • Lottery factor: 1

Links

Installation

Tested Compilers

  1. 9.12.2
  2. 9.10.1
  3. 9.8.4
  4. 9.6.5
  5. 9.4.8
  6. 9.2.8

Readme

Agda-style Equational Reasoning in Haskell by Data Kinds

Build Status Hackage

What is this?

This library provides means to prove equations in Haskell. You can prove equations in Agda's EqReasoning like style.

See blow for an example:

plusZeroL :: SNat m -> Zero :+: m :=: m
plusZeroL SZero = Refl
plusZeroL (SSucc m) =
  start (SZero %+ (SSucc m))
    === SSucc (SZero %+ m)    `because`   plusSuccR SZero m
    === SSucc m               `because`   succCongEq (plusZeroL m)

It also provides some utility functions to use an induction.

For more detail, please read source codes!

TODOs

  • Automatic generation for induction schema for any inductive types.