module Recognize.Strategy.Exercises where
import Domain.Math.CleanUp
import Domain.Math.Data.Relation
import Domain.Math.Equation.Views
import Domain.Math.Expr
import Domain.Math.Numeric.Views
import Domain.Math.Polynomial.BuggyRules
import Domain.Math.Polynomial.Views
import Ideas.Common.Library
import Recognize.Strategy.Strategies
import Recognize.Strategy.Views
recognizerExercise :: Exercise (Relation Expr)
recognizerExercise = makeExercise
{ exerciseId = describe "Evaluate an equation to solved form" $ newId "eval.equation.solvedform"
, status = Experimental
, strategy = recognizerStrategy
, prettyPrinter = show
, navigation = termNavigator
, ready = predicateView relationSolvedForm
, similarity = withoutContext (viewEquivalent (traverseView cleanUpACView >>> approxRelView >>> relEqualityView))
}
simplifyExercise :: Exercise Expr
simplifyExercise = makeExercise
{ exerciseId = describe "simplify expression that may contain variables" $
newId "algebra.manipulation.polynomial.rational"
, equivalence = withoutContext (viewEquivalent (polyViewWith rationalView))
, ready = predicateView $ polyViewWith rationalView
, strategy = simplifyStrategy
, navigation = termNavigator
}
normalizeExercise :: Exercise Expr
normalizeExercise = makeExercise
{ exerciseId = describe "normalize an expressions (includes simplifying fractions)" $
newId "algebra.manipulation.polynomial.rational"
, equivalence = withoutContext (viewEquivalent (polyViewWith rationalView))
, ready = predicateView $ polyViewWith rationalView
, strategy = normalizeStrategy
, navigation = termNavigator
, extraRules = map liftToContext buggyRulesExpr
}