# Probabilistic logic networks

## 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 Freire 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 multiple published books (some with free PDFs online), linked via Background_Publications

## Information on prior deprecated implementation

The first codebase for PLN was written by Izabela Freire Goertzel in 2004-5, but this version only did first-order forward-chaining.

The first really thorough code base for PLN was written by Ari Heljakka in 2006. In 2008 Joel Pitt (with assistance with Cesar Mercondes during GSoC) ported this version from the Novamente Cognition Engine to OpenCog.

During 2011-2013, Jade O'Neill reimplemented the algorithm in Python

Most recently, in 2014, Misgana Bayetta created a new C++ implementation using the Unified Rule Engine. Then Nil Geisweiller completed it, this is the version you should use now (2018). It works, even supports sophisticated control mechanism (for the backward chainer at least) enabling inference control meta-learning. Premise and rule selection based on ECAN doesn't work well yet.

For a suggestion about how to do rule selection better, see the page on Adaptive Rule Selection.