Name: unique-logic
Version: 0.4
License: BSD3
License-File: LICENSE
Author: Henning Thielemann
Maintainer: Henning Thielemann
Homepage: http://hub.darcs.net/thielema/unique-logic/
Category: Logic programming
Synopsis: Solve simple simultaneous equations
Description:
Solve a number of equations simultaneously.
This is not Computer Algebra,
better think of a kind of type inference algorithm
or logic programming with only one allowed solution.
.
Only one solution is computed.
Simultaneous equations with multiple solutions are not allowed.
However, variables may remain undefined.
The solver may optionally check for consistency.
It does not do so by default
since with floating point numbers or symbolic expressions
even simple rules may not be consistent.
.
The modules ordered with respect to abstraction level are:
.
* "UniqueLogic.ST.System":
Construct and solve sets of functional dependencies.
Example: @assignment3 (+) a b c@ meaning dependency @a+b -> c@.
.
* "UniqueLogic.ST.Rule":
Combine functional dependencies to rules
that can apply in multiple directions.
Example: @add a b c@ means relation @a+b = c@
which resolves to dependencies @a+b -> c, c-a -> b, c-b -> a@.
For an executable example see "UniqueLogic.ST.Example.Rule".
.
* "UniqueLogic.ST.Expression":
Allows to write rules using arithmetic operators.
It creates temporary variables automatically.
Example: @(a+b)*c =:= d@ resolves to @a+b = x, x*c = d@.
For an executable example see "UniqueLogic.ST.Example.Expression".
.
* "UniqueLogic.ST.System.Simple":
Provides specialised functions from "UniqueLogic.ST.System"
for the case of a system without labels and consistency checks.
.
* "UniqueLogic.ST.System.Label":
Provides a custom constructor for variables.
When creating a variable you decide whether and how
an assignment to this variable shall be logged.
There is an example that shows how to solve a logic system
using symbolic expressions.
The naming and logging allows us to observe shared intermediate results.
For an executable example see "UniqueLogic.ST.Example.Label".
.
* By using more sophisticated monad transformers,
we can check the equations for consistency,
report inconsistencies and how they arised.
We demonstrate that in "UniqueLogic.ST.Example.Verify".
.
The package is purely Haskell 98.
Tested-With: GHC==7.4.2
Cabal-Version: >=1.8
Build-Type: Simple
Source-Repository this
Tag: 0.4
Type: darcs
Location: http://hub.darcs.net/thielema/unique-logic/
Source-Repository head
Type: darcs
Location: http://hub.darcs.net/thielema/unique-logic/
Library
Build-Depends:
explicit-exception >=0.1.7 && <0.2,
transformers >=0.2 && <0.6,
utility-ht >=0.0.9 && <0.1,
base >= 4 && <5
GHC-Options: -Wall
Hs-Source-Dirs: src
Exposed-Modules:
UniqueLogic.ST.MonadTrans
UniqueLogic.ST.Duplicate
UniqueLogic.ST.System
UniqueLogic.ST.System.Simple
UniqueLogic.ST.System.Label
UniqueLogic.ST.Rule
UniqueLogic.ST.Expression
-- example modules
UniqueLogic.ST.Example.Rule
UniqueLogic.ST.Example.Label
UniqueLogic.ST.Example.Expression
UniqueLogic.ST.Example.Verify
UniqueLogic.ST.Example.Term
Test-Suite test-unique-logic
Type: exitcode-stdio-1.0
Main-Is: src/UniqueLogic/ST/Test.hs
GHC-Options: -Wall
Build-Depends:
QuickCheck >=2.4 && <3,
unique-logic,
non-empty >=0.0 && <0.4,
semigroups >=0.1 && <1.0,
transformers,
utility-ht,
base