This evaluation type is used to compare the student’s answer with the expression in the Definition field. It is quite similar to the evaluation type eval normal (which I suggest reading about first), except eval exact uses fewer simplification rules before comparison than eval normal does.

Where eval normal checks if `is(radcan(student’s answer)-radcan(definition field)=0)`

evaluates to true, the evaluation type eval exact checks if `is(student’s answer - definition field=0)`

evaluates to true. Documentation on the Maxima function `is(expr)`

can be found here.

The fastest way to check if two expressions are considered equal by the function `is(expr)`

is to check this using a Maxima interface (for example wxMaxima). Examples:

❗ Note that this evaluation type does not have automated feedback.

**Manually adjusting the level of simplification before comparison**

Using simplification flags, we can adjust the level of simplification that is done to the student’s answer before it is compared to the expression in the Definition field. Below, we list some simplification flags that might be useful and we explain how to use them.

**expop**(default: 0)`expop`

is the highest positive exponent which is automatically expanded. Thus (x + 1)^3 will be automatically expanded only if`expop`

is greater than or equal to 3. For example, rule 2 will not evaluate a^2+2ab+b^2 to true, but rule 3 will.

**expon**(default: 0)`expon`

is the exponent of the largest negative power which is automatically expanded. For example, if`expon:4`

then (x+1)^(-5) will not be automatically expanded.**logexpand**(default: true)

If`logexpand:true`

, then log(a^b) becomes b*log(a). If`logexpand:all`

, log(a*b) will also simplify to log(a)+log(b). If`logexpand:super`

, then log(a/b) will also simplify to log(a)-log(b) for rational numbers a/b, a#1. (log(1/b), for integer b, always simplifies.) If`logexpand:false`

, all of these simplifications will be turned off.**triginverses**(default: true)`triginverses`

controls the simplification of the composition of trigonometric and hyperbolic functions with their inverse functions. If`triginverses:all`

, both e.g. atan(tan(x)) and tan(atan(x)) simplify to x. If`triginverses:true`

, the arcfun(fun(x)) simplification is turned off. If`triginverses:false`

, both the arcfun(fun(x)) and fun(arcfun(x)) simplifications are turned off.**trigsign**(default: true)

When`trigsign:true`

, it permits simplification of negative arguments to trigonometric functions. E.g., sin(-x) will become -sin(x) only if`trigsign:true`

.

**simp**(default: true)When

`simp:false`

, all simplification is turned off*and all other specified flags in this Definition field are ignored*. Keep in mind that absolutely nothing is simplified. For example, the rule

will only evaluate a+b to true, but not b+a. Moreover,

will only evaluate 2*(a*b) to true, but not 2*a*b.

For this reason, we advise not to use `simp:false`

in a solution definition.

More simplification flags can be found in Maxima documentation (look for “Option variable” in the Maxima documentation).

Multiple flags can be used in the same Definition field (with the exception of `simp:false`

), like below:

Moreover, make sure that every item is separated by commas and that there are brackets around the whole expression in the Definition field. The mathematical expression should be the last one.

**More on evaluation types**

An overview of all evaluation types can be found here (for mathematical answers) and here (for text-based answers). More detail on the different fields of a feedback rule can be found here.