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 wybs.lang.NameResolver.ResolutionError
apply in class AbstractProofRulewybs.lang.NameResolver.ResolutionErrorpublic Formula simplify(Formula f) throws wybs.lang.NameResolver.ResolutionError
f - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyConjunct(Formula.Conjunct conjunct) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyDisjunct(Formula.Disjunct disjunct) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic Formula[] simplify(Formula[] children) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyQuantifier(Formula.Quantifier quantifier) throws wybs.lang.NameResolver.ResolutionError
forall x.true is simply
true.quantifier - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyInequality(Formula.Inequality ieq) throws wybs.lang.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 - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyArithmeticEquality(Formula.ArithmeticEquality eq) throws wybs.lang.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 - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyEquality(Formula.Equality eq) throws wybs.lang.NameResolver.ResolutionError
true == false reduces to false. In the
case that neither side is a constant, then the original equality is
returned.eq - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyInvoke(Formula.Invoke ivk) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic Formula simplifyIs(Formula.Is e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr[] simplifyExpressions(WyalFile.Expr[] children) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyExpression(WyalFile.Expr e) throws wybs.lang.NameResolver.ResolutionError
e - AmbiguousNameErrorNameNotFoundErrorwybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyConstant(WyalFile.Expr.Constant e)
public WyalFile.Expr simplifyRecordInitialiser(WyalFile.Expr.RecordInitialiser e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyRecordAccess(WyalFile.Expr.RecordAccess e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyRecordUpdate(WyalFile.Expr.RecordUpdate e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyDereference(WyalFile.Expr.Dereference e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyInvoke(WyalFile.Expr.Invoke ivk) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayIndex(WyalFile.Expr.Operator e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayUpdate(WyalFile.Expr.Operator e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArrayLength(WyalFile.Expr.Operator e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyNonArithmetic(WyalFile.Expr.Operator e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic WyalFile.Expr simplifyArithmetic(WyalFile.Expr.Operator e) throws wybs.lang.NameResolver.ResolutionError
wybs.lang.NameResolver.ResolutionErrorpublic Formula.Truth evaluateInequality(int opcode, wybs.util.AbstractCompilationUnit.Value.Int lhs, wybs.util.AbstractCompilationUnit.Value.Int rhs)
1 < 0 evaluates to false,
etc.opcode - lhs - rhs - public Formula.Truth evaluateEquality(int opcode, wybs.util.AbstractCompilationUnit.Value lhs, wybs.util.AbstractCompilationUnit.Value rhs)
true == false evaluates to
false, etc.opcode - lhs - rhs - public wybs.util.AbstractCompilationUnit.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.