Tuesday, December 26, 2006


Libraries, etc.

Logical types has the following libraries, systems, and sample code. All provided with the usual caveats (they are not guaranteed to work, and Logical Types is not liable for you downloading and using this code):


a set of utilities useful for building production systems

contains modules:
Module test status documentation
utils 1/4 submodules testedno
utils.graph 0/1 new preds testedno
utils.random 0/10 preds testedno
utils.series 3/3 preds/funcs testedno
utils.xml 2/3 submodules testedno
utils.xml.facade 1/1 pred testedno
utils.xml.pprint 2/2 preds testedno
utils.xml.transform 4/9 funcs/preds tested no


A testing/verification framework for Mercury programs

see qcheck2 justification (work in progress)


Extends Mercury with op/3 declarations, allowing syntax modification

see installation instructions
see ltq doc
see write_canonical that interprets op/3 declarations

samples: hello.m and play.m


A set of fixes to the utilities provided in the Mercury extras distribution supporting operations with the any mode

see anys-diffus.zip simply to apply patches

Alpha: You Have Been Warned!

Work in progress to add a viable matrix protocol; will be rolled into the utils library.


A very small, thread-un-safe, foreign interface to libtiff; also requires matrix (which it already bundles).

Contact Information: dauclair at hotmail.com 703-300-0447
Copyright © 2006-2007, Logical Types, LLC. All rights reserved.



We have the works available under the following

Language Modification
January 3, 2006 Mutable syntax
in Mercury
work in progress Testing with qcheck2
January 16, 2006PADL
symposium post mortem

Rule-Based Logic System



Rule-based systems process data according
to sets of constraints established by the user. The results of these
systems is a collection of rule findings that can be used to construct
the final product or to assist the user in rendering an informed

The above description may seem all-too-general, as that describes
the what most programs do. This is indeed correct: rule-based
programming is sufficiently powerful enough to describe any
computable system. In fact, the rule-based approach is now being
viewed by the mainstream as the preferred method for workflow
analysis, process, resource scheduling, service-based systems, etc.
Nearly every software system has a set of rules, explicit or implied,
to which it adheres. The rule-based programming style model these
rule constructs directly and facilitate their manipulation as the
system grows and changes.



The traditional approach to building logic systems
is to construct a set of clauses where the head of the clause matches a
condition and the rest of the clause verifies the match through
a set of goals for that match. These clauses are known as
rules and a set of rules is a predicate, and this predicate can be
used, in turn, as a goal in a new rule. Deductive logic matches
problem specifications very closely and is a very effective way to
convert a set of requirements into a production system. Some examples
of types of problems that are easily modelled in deductive logic are
expert systems, planning systems and scheduling systems.

Deductive systems are used when the rules are clear, when the
user requires certain outcomes, and are very good at "explaining"
what the rule findings are and how they were arrived at.



The opposite approach to a deductive system is an
inductive one. Whereas in an deductive system, the user has very
exacting control over the process and outcome, in an inductive system,
the rules are obtained by deriving the relations between input data and
their outcomes, with very little guidance, if any, from the builder of
the system. Traditional inductive systems required very clean
data and had little tolerance for deviation -- a slight perturbation
in the data set could cause the system to fall into an undefined
state. Modern inductive systems have taken a different approach:
reaping the benefits of recent advances in probability and statistics,
these systems (such as Bayesian systems and neural networks) are
highly redundant and adaptive. These new systems consistently perform
well: they have excellent success narrowing to a classification from
apparently unrelated attributes, and they have a high rate of stability,
being very fault-tolerant, even in the presence of very noisy data.
It is also trivial to convert a statically trained inductive system
to one that learns continuously from new inputs and outcomes.

Inductive systems are used when users cannot explain how they arrive
at decisions (attributing the outcomes to a "feel" for the situation),
and where gradual trends result in eventual changes to outcomes.
These systems excel at making the correct decision with a very high
degree of confidence, but are poor at explaining what prompted the


Logical Types, LLC uses both deductive
and inductive logic to build systems as the needs of the customer

  • To rediscover the implicit rules of a phoneme-based name matching
    system, we created a purely inductive system that output a new
    program that had the phoneme contruction rules explicit.

  • A human resource scheduling system that required a set
    of clearly stated rules that filled duty times with a pool
    of personnel under a guiding principle of "fairness" was built
    using purely deductive logic.

  • A combined learning system and knowledge-engineered rule-based
    expert system was designed using a deductive rule manager with
    a supervised learning, Bayesian-like, component.

Contact Information: dauclair at hotmail dot com 703-300-0447
Copyright © 2006-2007, Logical Types, LLC. All rights reserved.