uniquelogictf
Solve simple simultaneous equations http://hub.darcs.net/thielema/uniquelogictf/
This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.
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.TF.System
: Construct and solve sets of functional dependencies. Example:assignment3 (+) a b c
means dependencya+b > c
.UniqueLogic.ST.TF.Rule
: Combine functional dependencies to rules that can apply in multiple directions. Example:add a b c
means relationa+b = c
which resolves to dependenciesa+b > c, ca > b, cb > a
. For an executable example seeUniqueLogic.ST.TF.Example.Rule
.UniqueLogic.ST.TF.Expression
: Allows to write rules using arithmetic operators. It creates temporary variables automatically. Example:(a+b)*c =:= d
resolves toa+b = x, x*c = d
. For an executable example seeUniqueLogic.ST.TF.Example.Expression
.UniqueLogic.ST.TF.System.Simple
: Provides specialised functions fromUniqueLogic.ST.TF.System
for the case of a system without labels and consistency checks.UniqueLogic.ST.TF.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 seeUniqueLogic.ST.TF.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.TF.Example.Verify
.
This variant of the package requires type families.
Changes
0.5

ZeroFractional
class 
generalize from
ST
monad to any monad supporting mutable references usingdataref
package