package aima.core.probability;
import aima.core.probability.proposition.Proposition;
/**
* Artificial Intelligence A Modern Approach (3rd Edition): page 484.<br>
* <br>
* A probability model on a discrete, countable set of worlds. The proper
* treatment of the continuous case brings in certain complications that are
* less relevant for most purposes in AI.
*
* @author Ciaran O'Reilly
*/
public interface FiniteProbabilityModel extends ProbabilityModel {
/**
* <b>P</b>(X,...)<br>
*
* @param phi
* the propositions of interest.
* @return all the possible values of the propositions φ. This is a
* Vector of numbers, where we assume a predefined ordering of the
* domain of the relevant random variables.
*/
CategoricalDistribution priorDistribution(Proposition... phi);
/**
* Get a conditional distribution. Example:<br>
* <br>
* <b>P</b>(X | Y) gives the values of P(X = x<sub>i</sub> | Y =
* y<sub>j</sub>) for each possible i, j pair.
*
* @param phi
* the proposition for which a probability distribution is to be
* returned.
* @param evidence
* information we already have.
* @return the conditional distribution for <b>P</b>(φ | evidence).
*/
CategoricalDistribution posteriorDistribution(Proposition phi,
Proposition... evidence);
/**
* Get a distribution on multiple variables. Example, the product rule:<br>
* <br>
* <b>P</b>(X, Y) gives the values of P(X = x<sub>i</sub> | Y =
* y<sub>j</sub>)P(Y = y<sub>j</sub>) for each possible i, j pair.
*
* @param propositions
* the propositions for which a joint probability distribution is
* to be returned.
* @return the joint distribution for <b>P</b>(X, Y, ...).
*/
CategoricalDistribution jointDistribution(Proposition... propositions);
}