Flint toolkit

This document describes Flint, a powerful sub-system which augments the decision-making power of both Prolog and Flex. Flint provides a comprehensive and versatile set of facilities for programmers who wish to incorporate uncertainty within their expert systems and decision support applications.


Traditional expert systems work on the basis that everything is either true or false, and that any rule whose conditions are satisfiable is useable, i.e. its conclusion(s) are true. This is rather simplistic and can lead to quite brittle expert systems. Flint provides support for where the domain knowledge is not so clearcut.

Flint supports three treatments of uncertainty, namely: Fuzzy logic, Bayesian updating and Certainty factors. Flint does this by augmenting the normal backward-chaining rules of Prolog and, where Flex is present, by extending the KSL of Flex.

Fuzzy Logic

Fuzzy logic is a superset of conventional Boolean logic with extensions to cater for imprecise information. Fuzzy logic permits vague information, knowledge and concepts to be used in an exact mathematical manner. Words and phrases such as 'fast', 'slow', 'very fast', 'quite slow', 'not very fast' are used to describe continuous, overlapping states. This enables qualitative and imprecise reasoning statements to be incorporated within rule-bases so producing simpler, more intuitive and better behaved models. According to Zadeh, the father of fuzzy logic, the linguistic description of a system is much more effective and less specific than the numerical or mathematical description.

Fuzzy logic is based on the principle that every crisp value belongs to all relevant fuzzy sets to various extents, called the degrees of membership. These range from 0 (definitely not a member) to 1 (definitely is a member) with values between generated by a membership function. This contrasts with conventional, boolean logic, where membership of a set is either false or true, i.e. 0 or 1. This graduation from zero to one enables us to smooth out and overlap the boundaries between sets. Unlike boolean logic where sets are mutually exclusive, fuzzy logic allows crisp values to belong to more than one fuzzy set. This means that whereas in a crisp system, only one rule might be fired and used, in a fuzzy system all rules are used, with each having some influence on the resulting output. This is more of a concensus approach to expert systems.

The advantages of fuzzy logic expert systems compared to non-fuzzy expert systems are that they typically require fewer rules, need fewer variables, use a liguistic rather than a numerical description, and can relate output to input for any device without needing to understand the device's inner workings.

Fuzzy Editor

Flint comes with an easy-to-use Fuzzy Editor which lets you define and also edit membership functions. The Fuzzy Editor generates either Prolog or Flex code through its graphical user interface, depending on which is required.

Flint Fuzzy Editor

Bayesian Updating

Bayesian Updating provides a means of propagating probabilities. Bayesian networks are a rich and powerful way of building probablistic models. The perceived uncertainty within the model, as represented by the CONFIRMS and DENIES weights within the rules, is propagated through the network by the probabilistic inference engine and revised in the light or absence of data.

Certainty Factors

Certainty theory, as used in MYCIN, represents an alternative to Bayesian Updating. Instead of using probablities, each assertion has a certainty value between 1 and -1 associated with it, as do rules.

The updating procedure for certainty values consists of adding a +ve or -ve value to the current certainty of a hypothesis. This contrasts with Bayesian updating where the odds of a hypothesis are always multiplied by the appropriate weighting.

Find out more about Flint