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.

  • evidence or given (optional): Arrayref of conditioning evidence goals.

  • with_gradients (optional): Boolean flag. If true, computes exact partial derivatives for all facts and choices.