# Probabilistic Logic Networks

### From OpenCog

*See also*:

## Contents |

## Introduction

**PLN** is a novel conceptual, mathematical and computational approach to uncertain inference. In order to carry out effective reasoning in real-world circumstances, AI software must robustly handle uncertainty. However, previous approaches to uncertain inference do not have the breadth of scope required to provide an integrated treatment of the disparate forms of cognitively critical uncertainty as they manifest themselves within the various forms of pragmatic inference. Going beyond prior probabilistic approaches to uncertain inference, **PLN** is able to encompass within uncertain logic such ideas as induction, abduction, analogy, fuzziness and speculation, and reasoning about time and causality.

The goal underlying the theoretical development of **PLN** has been the creation of practical software systems carrying out complex, useful inferences based on uncertain knowledge and drawing uncertain conclusions. **PLN** has been designed to to allow basic probabilistic inference
to interact with other kinds of inference such as intensional inference, fuzzy
inference, and higher-order inference using quantifiers, variables, and combinators, and be a more convenient approach than Bayes nets (or other conventional approaches) for the purpose of interfacing basic probabilistic inference with these other sorts of inference.

**PLN** begins with a term logic foundation, and then adds on elements of probabilistic and combinatory logic, as well as some aspects of predicate logic, to form a complete inference system, tailored for easy integration with software components embodying other (not explicitly logical) aspects of intelligence.

**PLN** was developed by Ben Goertzel, Matt Ikle', Izabela Goertzel and Ari Heljakka for use as a **cognitive algorithm** used by **MindAgents** within the OpenCog Core. **PLN** was developed originally for use within the Novamente Cognition Engine.

**PLN** represents truth values as intervals, but with different semantics than in Imprecise Probability Theory.

The basic goal of **PLN** is to provide reasonably accurate probabilistic inference in a way that is compatible with both Term Logic and Predicate Logic, and scales up to operate in real time on large dynamic knowledge bases.

The current version of **PLN** has been used in narrrow-AI applications such as the inference of biological hypothesis from knowledge extracted from biological texts by language processing, and to assist reinforcement learning of an embodied agent, in a simple virtual world, figure out how to play "fetch".

*PLN was previously known as PTL or "Probabilistic Term Logic".*

For a more thorough discussion of PLN, see Publications#PLN

## Implementation

**Notice: A new version of PLN is currently under active development, following the guidelines listed in New PLN Implementation_Guide, 2013.**

**Visit the New PLN Tutorial, 2013 for usage instructions.**

**Some of the information on this page refers to a prior version that is no longer supported.**

## Information on prior deprecated implementation

The code base for **PLN** was written by Ari Heljakka in 2006. In 2008 Joel Pitt (with assistance with Cesar Mercondes during GSoC) have ported it from Novamente to OpenCog. Since then Nil, Jared, and others have been steadily improving it from somewhat messy research code to a stable inference engine.

In 2011, Jared implemented the algorithm in Python, which is expected to largely replace the C++ implementation moving forward.

What follows will be description of the implementation as our own understanding of it grows, which will hopefully help others who wish to explore the inner workings of **PLN**. This is not a substitute for code documentation however!

PLN usage describes how to use PLN in the context of the OpenCog shell and the Scheme interpreter.

### Classes

Briefly, what each class's purpose is:

- Formula takes TruthValues as input and returns a TruthValue, and generally each is associated with a Rule.
- Rules inputs Vertexes (Handles) and returns a Vertex (Handle).
- BITNodeRoot is the main class of the backward chainer which is a Vertex Tree along with variable binding and other fancy functionality.
- New PLN Chainer Design
- The PLN_Forward_Chainer does forward chaining, using the Back Inference Tree internally.

#### The AtomTable and it's descendants

- DirectATW is the direct route to AtomTable.
- NormalizingATW normalizes the atoms before they are inserted to AT.
- Mindshadow is possibly obsolete.
- MindDBProxy is a NM construct, refer to NM core code docs. It should be replaced by the TLB.
- LocalATW is IIRC for debugging, and obsolete.

~~PLN Details~~
See this instead: New PLN Design, 2013