logic-and-learning-lab/Popper

An inductive logic programming system

What it solves

Popper is an inductive logic programming (ILP) system that allows a computer to learn logical rules from a set of examples and existing background knowledge. It automates the process of discovering the underlying logic that explains a specific relationship, such as identifying the rule for "grandparent" based on parent-child data.

How it works

Popper takes three primary inputs: a file of positive and negative examples, a background knowledge (BK) file containing known facts, and a bias file that defines the search space (which predicates can be used in the rule's head or body). It uses solvers like CPSAT or NuWLS to find the simplest logical rules that fit the data. It can handle noisy data using a Minimal Description Length (MDL) cost function and supports advanced logic features like recursion and type annotations to refine the search process.

Who it’s for

It is designed for researchers and developers working in symbolic AI, logic programming, and automated rule discovery who have a background in Prolog.

Highlights

  • Recursive Rule Learning: Capable of learning rules where a predicate refers to itself.
  • Noise Handling: Can learn from imperfect data using the --noisy flag.
  • C-SAT and NuWLS Integration: Supports high-performance solvers to accelerate the rule-discovery process.
  • Customizable Constraints: Allows the use of type and direction annotations to significantly reduce learning time and improve accuracy.

Related

  • Project
  • Project
  • Project
  • Project
  • Dispatch