public class Simplification extends AbstractProofRule implements Proof.LinearRule
simp, types| Constructor and Description |
|---|
Simplification(TypeSystem types) |
apply, extractDefinedTerms, findAllInstances, substituteclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitapplypublic Simplification(TypeSystem types)
public String getName()
Proof.RulegetName in interface Proof.Rulepublic Proof.State apply(Proof.State head, Formula truth) throws NameResolver.ResolutionError
apply in class AbstractProofRuleNameResolver.ResolutionErrorpublic Formula simplify(Formula f) throws NameResolver.ResolutionError
f - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic Formula simplifyConjunct(Formula.Conjunct conjunct) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic Formula simplifyDisjunct(Formula.Disjunct disjunct) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic Formula[] simplify(Formula[] children) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic Formula simplifyQuantifier(Formula.Quantifier quantifier) throws NameResolver.ResolutionError
forall x.true is simply
true.quantifier - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic Formula simplifyInequality(Formula.Inequality ieq) throws NameResolver.ResolutionError
x+y < x we can cancel x
to give y < 0.true or false. For example,
0 < 1 reduces to true whilst
1 >= 0 reduces to false.-x < 1 is balanced to
0 < 1 + x. Likewise, 2*x < 6*y is factorised to
x < 3*y.ieq - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic Formula simplifyArithmeticEquality(Formula.ArithmeticEquality eq) throws NameResolver.ResolutionError
x+y == x we can cancel x
to give y == 0.true or false. For example,
0 == 0 reduces to true whilst
1 == 0 reduces to false.-x == 1 is balanced to
0 == 1 + x. Likewise, 2*x == 6*y is factorised
to x == 3*y.ieq - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic Formula simplifyEquality(Formula.Equality eq) throws NameResolver.ResolutionError
true == false reduces to false. In the
case that neither side is a constant, then the original equality is
returned.eq - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic Formula simplifyInvoke(Formula.Invoke ivk) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic Formula simplifyIs(Formula.Is e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr[] simplifyExpressions(WyalFile.Expr[] children) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyExpression(WyalFile.Expr e) throws NameResolver.ResolutionError
e - AmbiguousNameErrorNameNotFoundErrorNameResolver.ResolutionErrorpublic WyalFile.Expr simplifyConstant(WyalFile.Expr.Constant e)
public WyalFile.Expr simplifyRecordInitialiser(WyalFile.Expr.RecordInitialiser e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyRecordAccess(WyalFile.Expr.RecordAccess e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyRecordUpdate(WyalFile.Expr.RecordUpdate e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyDereference(WyalFile.Expr.Dereference e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyInvoke(WyalFile.Expr.Invoke ivk) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayIndex(WyalFile.Expr.Operator e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayUpdate(WyalFile.Expr.Operator e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayLength(WyalFile.Expr.Operator e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyNonArithmetic(WyalFile.Expr.Operator e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArithmetic(WyalFile.Expr.Operator e) throws NameResolver.ResolutionError
NameResolver.ResolutionErrorpublic Formula.Truth evaluateInequality(WyalFile.Opcode opcode, WyalFile.Value.Int lhs, WyalFile.Value.Int rhs)
1 < 0 evaluates to false,
etc.opcode - lhs - rhs - public Formula.Truth evaluateEquality(WyalFile.Opcode opcode, WyalFile.Value lhs, WyalFile.Value rhs)
true == false evaluates to
false, etc.opcode - lhs - rhs - public WyalFile.Pair<WyalFile.Expr,WyalFile.Expr> normaliseBounds(WyalFile.Expr lhs, WyalFile.Expr rhs)
x < y - z. In this case, the right-hand side is
not simplifyd because it contains a negative term. The simplifyd
version of this inequality would be x + z < y.lhs - rhs - public Arithmetic.Polynomial filter(Arithmetic.Polynomial p, boolean sign)
Copyright © 2017. All rights reserved.