Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tortis/elm-sat

A simple DPLL SAT solver in Elm
https://github.com/tortis/elm-sat

dpll-algorithm elm elm-lang sat sat-solver

Last synced: 26 days ago
JSON representation

A simple DPLL SAT solver in Elm

Awesome Lists containing this project

README

        

# Elm Sat [![pipeline status](https://gitlab.com/findley/elm-sat/badges/master/pipeline.svg)](https://gitlab.com/findley/elm-sat/commits/master)
A simple [DPLL](https://en.wikipedia.org/wiki/DPLL_algorithm) sat solver implemented in Elm.

Note: This repository is maintained at https://gitlab.com/findley/elm-sat and mirrored to https://github.com/tortis/elm-sat.

## Usage
The Problem type is just an alias for `List (List Int)`. Variables (literals) are represented by integers where a negative integer indicates negation of the literal.

Sat problems must be in [CNF]() form.

```Elm
import Sat

problem : Sat.Problem
problem = [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ -1, -2, -3 ], [ 2, 3 ], [ -2, -3 ] ]

solution : Maybe Sat.Solution
solution = Sat.solve problem -- Just [1,2,-3]
```

The Sat.Utils module exposes `fromDimacs` which will turn a DIMACS formatted string into a Problem.

## Performance
Elm Sat performance appears to be worse than [MiniSAT compiled to JS](https://jgalenson.github.io/research.js/demos/minisat.html). Adding benchmarks and improving performance are areas for future development.

## License
This code is distributed under the MIT license, see the [LICENSE](LICENSE) file.