## org.opencyc.inferencesupport
Class ConstraintRule

    java.lang.Object
      |
      +--org.opencyc.inferencesupport.Literal
            |
            +--org.opencyc.inferencesupport.ConstraintRule

All Implemented Interfaces:
  java.lang.Comparable

public class ConstraintRule
extends Literal
implements java.lang.Comparable

`ConstraintRule` object to model the attributes and behavior of a constraint rule.

Author:
  Stephen L. Reed

  Copyright 2001 Cycorp, Inc., license is open source GNU LGPL.

  the license

  www.opencyc.org

  OpenCyc at SourceForge

  THIS SOFTWARE AND KNOWLEDGE BASE CONTENT ARE PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENCYC ORGANIZATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE AND KNOWLEDGE BASE CONTENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

See Also:
  `UnitTest.testConstraintRule()`

Fields inherited from class org.opencyc.inferencesupport.Literal
`formula, nbrFormulaInstances, NO_SUBSUMPTION, SUBSUMED_BY, SUBSUMES, variables`

Constructor Summary
`ConstraintRule(CycList formula)` Constructs a new `ConstraintRule` object from a `CycList`.
`ConstraintRule(java.lang.String formulaString)` Constructs a new `ConstraintRule` object from a `CycList` `String` representation.

Method Summary
`java.lang.Object` `clone()` Creates and returns a copy of this `ConstraintRule`.
`static boolean` `evaluateConstraintRule(CycList instantiatedConstraintRule)` Evaluates the instantiated constraint rule locally without asking OpenCyc.
`ConstraintRule` `instantiate(CycVariable cycVariable, java.lang.Object value)` Returns a new `ConstraintRule` which is the result of substituting the given `Object` value for the given `CycVariable`.
`boolean` `isExtensionalVariableDomainPopulatingConstraintRule()` Returns `true` if this is an extensional variable domain populating `ConstraintRule`.
`boolean` `isVariableDomainPopulatingRule()` Returns `true` if this is a variable domain populating `Rule`.
`static int` `numericallyEvaluateExpression(java.lang.Object expression)` Returns the numerical value of the expression.
`static java.util.ArrayList` `simplifyConstraintRuleExpression(CycList cycList)` Simplifies a rule expression.

Methods inherited from class org.opencyc.inferencesupport.Literal
`compareTo, cyclify, determineSubsumption, equals, gatherVariables, getArguments, getArity, getFormula, getPredicate, getVariables, hasEvaluatableNumericalArgs, hashCode, isAllDifferent, isEvaluatable, isGround, isIrreflexive, isSubsumedBy, isUnary, isValidConstraintRuleExpression, substituteVariable, subsumes, toString`

Methods inherited from class java.lang.Object
`finalize, getClass, notify, notifyAll, wait, wait, wait`

Methods inherited from interface java.lang.Comparable
`compareTo`

Constructor Detail

### ConstraintRule

    public ConstraintRule(java.lang.String formulaString)
                   throws CycApiException

  Constructs a new `ConstraintRule` object from a `CycList` `String` representation.

  Parameters:
    `formulaString` - the rule's formula `String`, which must be a well formed OpenCyc query represented by a `CycList`.

### ConstraintRule

    public ConstraintRule(CycList formula)

  Constructs a new `ConstraintRule` object from a `CycList`.

        String ruleAsString = "(#$isa ?x #$Cathedral)";
        ConstraintRule rule1 = new ConstraintRule (cycAccess.makeCycList(ruleAsString));

  Parameters:
    `formula` - the rule's formula, which must be a well formed OpenCyc query represented by a `CycList`.

Method Detail

### simplifyConstraintRuleExpression

    public static java.util.ArrayList simplifyConstraintRuleExpression(CycList cycList)
                                                                throws java.io.IOException

  Simplifies a rule expression.

  (#$and (<rule1> <rule2> ... <ruleN>) becomes <rule1> <rule2> ... <ruleN>

  Parameters:
    `cycList` - the rule expression that is simplified
  Returns:
    an `ArrayList` of `ConstraintRule` objects.
  See Also:
    `UnitTest.testConstraintRule()`

### clone

    public java.lang.Object clone()

  Creates and returns a copy of this `ConstraintRule`.
  Overrides:
    `clone` in class `java.lang.Object`
  Returns:
    a clone of this instance

### evaluateConstraintRule

    public static boolean evaluateConstraintRule(CycList instantiatedConstraintRule)
                                          throws java.io.IOException

  Evaluates the instantiated constraint rule locally without asking OpenCyc.
  Parameters:
    `instantiatedConstraintRule` - the fully instantiated constraint rule whose predicates can be evaluated locally without asking OpenCyc.
  Returns:
    the truth value of the fully instantiated constraint rule

### numericallyEvaluateExpression

    public static int numericallyEvaluateExpression(java.lang.Object expression)
                                             throws java.io.IOException

  Returns the numerical value of the expression.
  Parameters:
    `expression` - the expression to be evaluated which can be a `Integer` value, or a `CycList`
  Returns:
    the numerical value of the expression

### isVariableDomainPopulatingRule

    public boolean isVariableDomainPopulatingRule()
                                           throws java.io.IOException,
                                                  CycApiException

  Returns `true` if this is a variable domain populating `Rule`.
  Returns:
    `boolean` indicating if this is a variable domain populating `Rule`.

### isExtensionalVariableDomainPopulatingConstraintRule

    public boolean isExtensionalVariableDomainPopulatingConstraintRule()
                                                                throws java.io.IOException,
                                                                       CycApiException

  Returns `true` if this is an extensional variable domain populating `ConstraintRule`. An extensional rule is one in which all the values are listed.
  Returns:
    `boolean` indicating if this is an extensional variable domain populating `ConstraintRule`.

### instantiate

    public ConstraintRule instantiate(CycVariable cycVariable,
                                      java.lang.Object value)

  Returns a new `ConstraintRule` which is the result of substituting the given `Object` value for the given `CycVariable`.
  Parameters:
    `cycVariable` - the variable for substitution
    `value` - the value which is substituted for each occurrance of the variable
  Returns:
    a new `ConstraintRule` which is the result of substituting the given `Object` value for the given `CycVariable`