Problem components for atomic elements.
A problem component created for a chain element.
A collection of problem components.
A problem component that provides an expand method.
Component collections for models that recursively use chain function memoization.
Component collections for models that recursively use chain function memoization. This works by incrementing depth at every expansion. Thus, if the maximum depth of expansion is d, then there can be up to d copies of each expansion.
A problem component for a MakeArray element.
Component collections for models that recursively use chain function memoization.
Component collections for models that recursively use chain function memoization. When expanding a subproblem, this works by computing the least depth that does not create a cycle in the graph of subproblems.
This maintains the invariant that if an expansion exists at depth d > 1, then an expansion also exists at depth d - 1. Furthermore, the expansion at depth d - 1 directly or indirectly uses the expansion at depth d. This invariant makes it possible to find the least depth that does not create a cycle by performing exponential search.
A Problem defines an inference problem to be solved.
A Problem defines an inference problem to be solved. It includes a set of components directly contained in the problem. These components might have nested subproblems. It also refers to global components that are outside of this problem. The targets are elements that appear in this problem that are visible outside. They might be newly defined in this problem or they might be defined previously, but either way, they should not be eliminated.
Component collections for models that recursively use chain function memoization.
Component collections for models that recursively use chain function memoization. This works by incrementing depth at as few edges as possible in the graph of expansions. The collection maintains a graph of expansions that can use each other without incrementing the depth of recurison. Expansions are greedily added to this graph until one creates a cycle. Such an edge is instead recorded as an edge along which we must increment the depth when expanding.
To speed up factor creation time, it's necessary to override the hashcode of component collections.
A collection of problem components. This data structure manages all the components being used in the solution of a top-level problem and its nested subproblems. Every element exists in at most one component. To create a new component for an element, you need to say what problem it belongs to.
This class is intended for models that do not use chain function memoization recursively; for this purpose, use
RecursiveComponentCollection
.