AtomicTerm

abstract class AtomicTerm<A : HeytingAlgebra<A>> : LeftHandTerm<A> , RightHandTerm<A> , DataFlowNode<A>

Constraint terms that are fully evaluated. For example, constants and variables, but not expressions.

Constructors

AtomicTerm
Link copied to clipboard
fun AtomicTerm()

Functions

getValue
Link copied to clipboard
abstract fun getValue(solution: ConstraintSolution<A>): A

Returns the value of this term given an assignment of values to every variable in the term.

join
Link copied to clipboard
abstract fun join(that: A): RightHandTerm<A>

Return a term that represents the join of this with a constant.

meet
Link copied to clipboard
abstract fun meet(that: A): LeftHandTerm<A>

Return a term that represents the meet of this with a constant.

transfer
Link copied to clipboard
abstract fun transfer(input: A): A

Compute the output value for this node given the meet of all values from incoming edges. The incoming values might only be upper bounds rather than being exact, in which case this function should return an upper bound. When the incoming values are exact, this function should also return an exact answer.

Properties

inEdge
Link copied to clipboard
open override val inEdge: DataFlowEdge<A>

Return an edge that captures the operation preformed by this term. In the constraint graph, this will become an incoming edge of node.

node
Link copied to clipboard
open override val node: AtomicTerm<A>

Return the node that will represent this term in the constraint graph.

outEdge
Link copied to clipboard
open override val outEdge: DataFlowEdge<A>

Return an edge that captures the operation preformed by this term. In the constraint graph, this will become an outgoing edge of node.

Inheritors

ConstantTerm
Link copied to clipboard
VariableTerm
Link copied to clipboard