# The type-settheory package

Type classes can express sets and functions on the type level, but they are not first-class citizens. Here we take the approach of expressing type-level sets and functions as *types*. The instance system is replaced by value-level proofs which can be directly manipulated. In this way the Haskell type level can support a quite expressive constructive set theory; for example, we have:

Subsets and extensional set equality

Unions (binary or of sets of sets), intersections, cartesian products, powersets, and a kind of dependent sum and product

Functions and their composition, images, preimages, injectivity

The meaning of the proposition-types here is *not* purely by convention; it is actually grounded in GHC "reality": A proof of `A :=: B` gives us a safe coercion operator `A -> B` (while the logic is inconsistent *at compile-time* due to the fact that Haskell has general recursion, we still have that proofs of falsities are `undefined` or non-terminating programs, so for example if `Refl` is successfully pattern-matched, the proof must have been correct).

## Properties

Versions | 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.3.1 |
---|---|

Dependencies | base (==4.*), category-extras, containers, mtl, syb, template-haskell, type-equality [details] |

License | BSD3 |

Author | Daniel Schüssler |

Maintainer | daniels@community.haskell.org |

Stability | Alpha |

Category | Math, Language |

Source repository | head: darcs get http://code.haskell.org/~daniels/type-settheory |

Uploaded | Tue Oct 27 12:46:37 UTC 2009 by DanielSchuessler |

Distributions | NixOS:0.1.3.1 |

Downloads | 990 total (22 in the last 30 days) |

Votes | |

Status | Docs not available [build log] All reported builds failed as of 2015-11-25 [all 4 reports] |

## Modules

*Control*- Control.SMonad

*Data*- Data.Category
*Typeable*- Data.Typeable.Extras

*Type*- Type.Dummies
- Type.Function
- Type.Logic
- Type.Set
- Type.Set.Example

## Downloads

- type-settheory-0.1.tar.gz [browse] (Cabal source package)
- Package description (included in the package)