Copyright | (c) John Maraist 2022 Kenneth D. Forbus Johan de Kleer and Xerox Corporation 1986-1993 |
---|---|
License | AllRightsReserved |
Maintainer | haskell-tms@maraist.org |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Translation of Forbus and de Kleer's assumption-based truth maintenance systems (ATMSes) from Common Lisp to Haskell.
This is not a very "Haskelly" implementation; rather, it is a
translation of the original code with minimal changes. Most of the
deviations from the original are due to either Haskell's strong
typing, which necessitates some additional tagging, and to the
abomination which is Lisp's do
macro. The translation relies on
mutable data structures using STT
state thread references. A more
pure translation, possibly not relying on the ST
monad/STT
transformer, is a significant piece of
future work.
Note also there are restrictions on the embedded monad m
which can
be wrapped in the STT
transformer; see the Control.Monad.ST.Trans
documentation for details.
See the LICENSE.txt
and README-forbus-dekleer.txt
files
distributed with this work for a paragraph stating scope of permission
and disclaimer of warranty, and for additional information regarding
copyright ownership. The above copyright notice and that paragraph
must be included in any separate copy of this file.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, for NON-COMMERCIAL use. See the License for the specific language governing permissions and limitations under the License.
Synopsis
- data Monad m => ATMST s m a
- data AtmsErr
- runATMST :: Monad m => (forall s. ATMST s m r) -> m (Either AtmsErr r)
- setInitialEnvTableAlloc :: Monad m => Int -> ATMST s m ()
- setEnvTableIncr :: Monad m => Int -> ATMST s m ()
- getInitialEnvTableAlloc :: Monad m => ATMST s m Int
- getEnvTableIncr :: Monad m => ATMST s m Int
- class NodeDatum d
- contradictionNodeDatum :: NodeDatum d => d
- data (Monad m, NodeDatum d) => ATMS d i r s m
- createATMS :: (Debuggable m, NodeDatum d) => String -> ATMST s m (ATMS d i r s m)
- atmsTitle :: ATMS d i r s m -> String
- getNodes :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [Node d i r s m]
- getJusts :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [JustRule d i r s m]
- getContradictions :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [Node d i r s m]
- getAssumptions :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [Node d i r s m]
- getContradictionNode :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Node d i r s m)
- getEmptyEnvironment :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Env d i r s m)
- getNodeString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Node d i r s m -> String)
- getJustString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (JustRule d i r s m -> String)
- getDatumString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (d -> String)
- getInformantString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (i -> String)
- getEnqueueProcedure :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (r -> ATMST s m ())
- setDatumStringViaString :: Monad m => ATMS String i r s m -> ATMST s m ()
- setDatumStringViaShow :: (NodeDatum d, Show d, Monad m) => ATMS d i r s m -> ATMST s m ()
- setInformantStringViaString :: (Monad m, NodeDatum d) => ATMS d String r s m -> ATMST s m ()
- setInformantStringViaShow :: (Show i, Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- data (Monad m, NodeDatum d) => Node d i r s m
- nodeDatum :: Node d i r s m -> d
- createNode :: (Debuggable m, NodeDatum d) => ATMS d i r s m -> d -> Bool -> Bool -> ATMST s m (Node d i r s m)
- nodeATMS :: Node d i r s m -> ATMS d i r s m
- nodeString :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m String
- defaultNodeString :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m String
- getNodeLabel :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [Env d i r s m]
- getNodeRules :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [r]
- getNodeConsequences :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [JustRule d i r s m]
- assumeNode :: (Debuggable m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- makeContradiction :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- removeNode :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- data (Monad m, NodeDatum d) => JustRule d i r s m = JustRule Int i (Node d i r s m) [Node d i r s m]
- justInformant :: JustRule d i r s m -> i
- justConsequence :: JustRule d i r s m -> Node d i r s m
- justAntecedents :: JustRule d i r s m -> [Node d i r s m]
- data Justification d i r s m
- data Explanation d i r s m
- justifyNode :: (Debuggable m, NodeDatum d) => i -> Node d i r s m -> [Node d i r s m] -> ATMST s m ()
- data (Monad m, NodeDatum d) => Env d i r s m
- data EnvTable d i r s m
- envIndex :: Env d i r s m -> Int
- envAssumptions :: Env d i r s m -> [Node d i r s m]
- getEnvNodes :: (Monad m, NodeDatum d) => Env d i r s m -> ATMST s m [Node d i r s m]
- isTrueNode :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool
- isInNode :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool
- isInNodeByEnv :: (Monad m, NodeDatum d) => Node d i r s m -> Env d i r s m -> ATMST s m Bool
- isOutNode :: (Monad m, NodeDatum d) => Node d i r s m -> Env d i r s m -> ATMST s m Bool
- isNodeConsistentWith :: (Monad m, NodeDatum d) => Node d i r s m -> Env d i r s m -> ATMST s m Bool
- getNodeIsAssumption :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool
- getNodeIsContradictory :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool
- envIsNogood :: (Monad m, NodeDatum d) => Env d i r s m -> ATMST s m Bool
- debugAtms :: (MonadIO m, NodeDatum d) => String -> ATMS d i r s m -> ATMST s m ()
- printAtms :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- debugAtmsEnvs :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- printAtmsStatistics :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- formatNode :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m String
- formatNodes :: (Monad m, NodeDatum d) => String -> [Node d i r s m] -> ATMST s m String
- debugNode :: (MonadIO m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- printNode :: (MonadIO m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- whyNodes :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- whyNode :: (MonadIO m, NodeDatum d) => Node d i r s m -> ATMST s m ()
- debugEnv :: (MonadIO m, NodeDatum d) => Env d i r s m -> ATMST s m ()
- debugEnvTable :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> EnvTable d i r s m -> ATMST s m ()
- formatNodeLabel :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m String
- debugNogoods :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- printEnv :: (MonadIO m, NodeDatum d) => Env d i r s m -> ATMST s m ()
- printNogoods :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- printEnvs :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m ()
- printEnvTable :: (MonadIO m, NodeDatum d) => EnvTable d i r s m -> ATMST s m ()
- printTable :: (MonadIO m, NodeDatum d) => String -> EnvTable d i r s m -> ATMST s m ()
- debugJust :: (MonadIO m, NodeDatum d) => JustRule d i r s m -> ATMST s m ()
- printJust :: (MonadIO m, NodeDatum d) => JustRule d i r s m -> ATMST s m ()
- formatJustification :: (Monad m, NodeDatum d) => Justification d i r s m -> ATMST s m String
The ATMST monad
data Monad m => ATMST s m a Source #
The process of building and using a mutable ATMS.
Instances
MonadTrans (ATMST s) Source # | |
Defined in Data.TMS.ATMS.ATMST | |
(Monad m, Functor m) => Monad (ATMST s m) Source # | |
Monad m => Functor (ATMST s m) Source # | |
Monad m => MonadFail (ATMST s m) Source # | |
Defined in Data.TMS.ATMS.ATMST | |
(Monad m, Functor m) => Applicative (ATMST s m) Source # | |
MonadIO m => MonadIO (ATMST s m) Source # | |
Defined in Data.TMS.ATMS.ATMST |
Errors which can arise from ATMS operations.
CannotRemoveNodeWIthConsequences String Int | It is not possible to remove a |
InternalNoEmptyEnv | Internal error called when there is no internal
default empty |
FromMonadFail String | Indicates a pattern-matching failure within an
|
runATMST :: Monad m => (forall s. ATMST s m r) -> m (Either AtmsErr r) Source #
Execute a computation in the ATMST
monad transformer.
setInitialEnvTableAlloc :: Monad m => Int -> ATMST s m () Source #
Retrieve the current initial Env
table size setting.
setEnvTableIncr :: Monad m => Int -> ATMST s m () Source #
Retrieve the current initial Env
table size setting.
getInitialEnvTableAlloc :: Monad m => ATMST s m Int Source #
Retrieve the current initial Env
table size setting.
getEnvTableIncr :: Monad m => ATMST s m Int Source #
Retrieve the current initial Env
table size setting.
ATMS data structures
Component classes
Instances
NodeDatum String Source # | |
Defined in Data.TMS.ATMS.ATMST | |
NodeDatum Symbol Source # | |
Defined in Data.TMS.ATMS.ATMST |
contradictionNodeDatum :: NodeDatum d => d Source #
Top-level ATMS
data (Monad m, NodeDatum d) => ATMS d i r s m Source #
Top-level representation of an assumption-based truth maintenance system.
createATMS :: (Debuggable m, NodeDatum d) => String -> ATMST s m (ATMS d i r s m) Source #
Create a new, empty ATMS.
Translated from create-atms
in atms.lisp
.
ATMS components
getContradictions :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [Node d i r s m] Source #
Return the ATMS
's current contradictions list.
getAssumptions :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m [Node d i r s m] Source #
Return the ATMS
's current assumptions list.
getContradictionNode :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Node d i r s m) Source #
Return the ATMS
's built-in contradiction node.
getEmptyEnvironment :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Env d i r s m) Source #
Return the ATMS
's built-in empty environment.
getNodeString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (Node d i r s m -> String) Source #
getJustString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (JustRule d i r s m -> String) Source #
getDatumString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (d -> String) Source #
Return the ATMS
's current datum formatter.
getInformantString :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (i -> String) Source #
Return the ATMS
's current informant formatter.
getEnqueueProcedure :: (Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m (r -> ATMST s m ()) Source #
Return the ATMS
's current rule-queueing procedure.
setInformantStringViaString :: (Monad m, NodeDatum d) => ATMS d String r s m -> ATMST s m () Source #
setInformantStringViaShow :: (Show i, Monad m, NodeDatum d) => ATMS d i r s m -> ATMST s m () Source #
Nodes
data (Monad m, NodeDatum d) => Node d i r s m Source #
Wrapper for the datum associated with a node of the ATMS
.
Translated from (tms-node
in atms.lisp
.
Instances
(Monad m, NodeDatum d) => Eq (Node d i r s m) Source # | |
(Monad m, NodeDatum d) => Ord (Node d i r s m) Source # | |
Defined in Data.TMS.ATMS.ATMST compare :: Node d i r s m -> Node d i r s m -> Ordering # (<) :: Node d i r s m -> Node d i r s m -> Bool # (<=) :: Node d i r s m -> Node d i r s m -> Bool # (>) :: Node d i r s m -> Node d i r s m -> Bool # (>=) :: Node d i r s m -> Node d i r s m -> Bool # | |
(Monad m, NodeDatum d) => Show (Node d i r s m) Source # | |
createNode :: (Debuggable m, NodeDatum d) => ATMS d i r s m -> d -> Bool -> Bool -> ATMST s m (Node d i r s m) Source #
Node components
getNodeLabel :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [Env d i r s m] Source #
Return the Node
's label.
getNodeRules :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [r] Source #
Return the Node
's rules.
getNodeConsequences :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m [JustRule d i r s m] Source #
Return the Node
's consequences.
Setting node status
assumeNode :: (Debuggable m, NodeDatum d) => Node d i r s m -> ATMST s m () Source #
Justifications
justInformant :: JustRule d i r s m -> i Source #
The informant associated with applying this inference rule.
justConsequence :: JustRule d i r s m -> Node d i r s m Source #
The conclusion of this inference rule.
justAntecedents :: JustRule d i r s m -> [Node d i r s m] Source #
The antecedents of this inference rule.
data Justification d i r s m Source #
data Explanation d i r s m Source #
justifyNode :: (Debuggable m, NodeDatum d) => i -> Node d i r s m -> [Node d i r s m] -> ATMST s m () Source #
Environments and tables
data EnvTable d i r s m Source #
Type alias for the array storage of a table of Env
s arranged by
length.
envAssumptions :: Env d i r s m -> [Node d i r s m] Source #
The assumptions contained within this Env
.
Deduction and search utilities
Related to a node
isInNodeByEnv :: (Monad m, NodeDatum d) => Node d i r s m -> Env d i r s m -> ATMST s m Bool Source #
isNodeConsistentWith :: (Monad m, NodeDatum d) => Node d i r s m -> Env d i r s m -> ATMST s m Bool Source #
getNodeIsAssumption :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool Source #
Return whether the Node
's is currently markable as an assumption.
getNodeIsContradictory :: (Monad m, NodeDatum d) => Node d i r s m -> ATMST s m Bool Source #
Return whether the Node
's is currently contradictory.
Related to environments
envIsNogood :: (Monad m, NodeDatum d) => Env d i r s m -> ATMST s m Bool Source #
Shortcut for testing whether an Env
is nogood.
Printing and debugging
Functions prefixed format
build a computation returning a
String
. Functions prefixed debug
or print
build a unit
computation printing the artifact in question to standard output;
those with prefix debug
are generally more verbose.
debugAtms :: (MonadIO m, NodeDatum d) => String -> ATMS d i r s m -> ATMST s m () Source #
Give a verbose printout of an ATMS
.
printAtms :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m () Source #
Print the internal title signifying an ATMS.
Translated from print-atms
in atms.lisp
.
printAtmsStatistics :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> ATMST s m () Source #
Print statistics about an ATMS
.
Translated from print-atms-statistics
in atms.lisp
.
Nodes and node lists
Environments, labels, and tables
debugEnvTable :: (MonadIO m, NodeDatum d) => ATMS d i r s m -> EnvTable d i r s m -> ATMST s m () Source #
printEnv :: (MonadIO m, NodeDatum d) => Env d i r s m -> ATMST s m () Source #
Print an environment.
Translated from print-env
in atms.lisp
.
printTable :: (MonadIO m, NodeDatum d) => String -> EnvTable d i r s m -> ATMST s m () Source #
Print the entries of an EnvTable
.
Translated from print-table
in atms.lisp
.
Justifications
formatJustification :: (Monad m, NodeDatum d) => Justification d i r s m -> ATMST s m String Source #