Can also be considered form of "declarative languages" in which a solution is generated from a set of declarations about the domain of discourse and the conditions that define a correct solution.

Emphasis is on inferring
facts and conjectures

A program consists of
facts
and rules.

A program can be considered to be a set of initial axioms (facts) and a set of relationships (rules) against which we can ask questions in the form of conjectures (like facts but with variables) to find out what values are make the conjecture true.

Computation is done by
a seperate inference engine and is, in principle, hidden from the
programmer.