NAME
Logic::Probabilistic::Inference::Exact - Exact possible world enumeration solver with analytical gradients.
SYNOPSIS
use Logic::Probabilistic::Inference::Exact;
my $exact = Logic::Probabilistic::Inference::Exact->new(program => $prob_prog);
# Standard forward inference
my $result = $exact->query(query => 'burglary', evidence => ['alarm']);
say "P(burglary | alarm) = " . $result->probability;
# Differentiable inference with analytical gradients
my $diff_result = $exact->query(
query => 'burglary',
evidence => ['alarm'],
with_gradients => 1,
);
my $dP_dearthquake = $diff_result->gradient('earthquake');
say "dP/d(earthquake) = $dP_dearthquake";
DESCRIPTION
Enumerates all possible worlds and computes exact marginal and conditional probabilities under the Distribution Semantics.
When requested via with_gradients => 1 (or gradients => 1), calculates exact analytical partial derivatives dP(Q | E) / dp_i for every probabilistic fact and choice outcome in the program. This enables neurosymbolic backpropagation and parameter learning via gradient descent.
METHODS
max_worlds-
Returns the maximum number of worlds allowed for exact enumeration before croaking (default: 65,536).
query(%args)-
Executes exact inference for a given query and optional evidence goals. Arguments:
query(required): Predicate name or goal term.evidenceorgiven(optional): Arrayref of conditioning evidence goals.with_gradients(optional): Boolean flag. If true, computes exact partial derivatives for all facts and choices.