All CollectionsAuthorsEvaluation types

Learn about the different evaluation types for mathematical answers and how to use them

Updated over a week ago

In short, an evaluation type (when used in a solution) determines the way that the computer checks whether the student’s answer is correct or not.

Evaluation types are used in the “Solutions”, “Negative feedback” and “Positive feedback” tabs of an exercise. Below, we list a table of all evaluation types including their description. For some evaluation types, a separate article has been written including some examples of the use of this evaluation type. Links to these articles will be provided in the table. More information about automated feedback can be found here.

In case of relations like equations or inequalities, you can specify a rule to only apply to a side of the relations using `rhs`: for right hand side or `lhs`: for left hand side, before the definition. e.g. the evaluation type `contains_var` with Definition `rhs:x` checks for the variable x in only the right hand side.

A list of all evaluation types for mathematical answers

 Name Description Automated feedback contains_brackets Checks whether the user input contains brackets. Note that brackets for function arguments like `ln()` also count as brackets. With no arguments at least one occurrence triggers the rule. With one argument, the argument defines the number of bracket pairs that occur, optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =` contains_float Checks whether the user input contains floats. With no arguments at least one occurrence triggers the rule. With one argument, the argument defines the number of occurrences, optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =` contains_integer Checks whether the user input contains integers. With no arguments at least one occurrence triggers the rule. With one argument, the argument defines the number of occurrences, optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =` contains_number Checks whether the number in the Definition field is present in the user input. Works for both positive and negative floats and integers.Without argument (Definition field is empty), at least one occurrence of a number in the answer triggers the rule.With two arguments (; separated) , the second argument defines the number of occurrences. e.g. 2;2 optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =`. eg. `2; le 2` contains_one_base_power Answer contains exactly one power at the base. contains_symbol Checks whether the user input contains the symbol from the Definition field.With one argument, at least one occurrence triggers the rule. e.g. `minus`With two arguments (; separated) , the second argument defines the number of occurrences. e.g. `minus;2`, optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =`. eg. `minus; le 2`.With a list in the Definition field like `[arg1,arg2]`, each element will be treated as an argument like above, where the arguments will be treated as an OR. i.e. `[cos;lt2,sin;lt2]` is whether either sin or cos occur less than two times.Alternatively, the occurrence can be placed after the list, like so `[arg1,arg2];lt2`. e.g. `[sin,cos];lt2` checks whether sin or cos together occur less than two times.The symbol is one ofoperators: `abs, divide, minus, plus, power, root, times, unary_minus, factorial`relations: `approx, eq, geq, gt, leq, lt, neq`trigonometry: `arccos, arcsec, arcsin, arctan, cos, cot, sec, sin, tan`logarithms: `ln, log`numbers: `e, i, infinity, pi`linear algebra: `matrix,vector`logic: `and, equivalent, false, implies, not, or, true, xor`sets: `N, Q, R, Z, cartesian_product, in, intersect, notin, notsubset, set, setdiff, size, subset, union, emptyset, suchthat, list`limits: `limit, null, lambda`permutations: `permutation, cycle`units: `degree`​You kind find the symbols in a student answer using the editor. contains_symbol_other_than The user answer does not contain any other symbol than the one in the list in the Definition field, separated by ;, e.g. `plus;minus` means that only the symbols plus or minus may be present in the user`s answer. The symbol is one the list as specified in the contains_symbol evaluation type. contains_symbol_within Checks if the second operator in the definition field is present in the first operator of the answer. i.e. `times,plus` checks whether there is a multiplication that has a plus as a descendant.The second argument can be a list, where multiple symbols can be searched with an OR. The third argument optionally specifies the position of the child. i.e. `times,[plus,minus]` checks whether there is a multiplication that has a plus or a minus as a descendant. `divide,[plus,minus],2` checks whether the denominator of a fraction is a plus or minus or has one in it. contains_variable Checks whether the user input contains the variable from the Definition field.Without argument (Definition field is empty), at least one occurrence of a variable in the answer triggers the rule.With one argument, at least one occurrence triggers the rule. e.g. `x`With two arguments (; separated) , the second argument defines the number of occurrences. e.g. `x;2`, optionally specified by one of `le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =`. eg. `x;gt 2`​With a list in the Definition field like `[arg1,arg2]`, each element will be treated as an argument like above, where the arguments will be treated as an OR. i.e. `[x;lt2,y;lt2]` is whether either x or y occur less than two times.Alternatively, the occurrence can be placed after the list, like so `[arg1,arg2];lt2`. e.g. `[x,y];lt2` checks whether x or y together occur less than two times. contains_variable_in_symbol Checks if the variable in the definition field is present in the first operator/symbol of the answer. i.e `times,x` checks whether there is a multiplication that has a variable x as a descendant. The second argument can be a list, where multiple symbols can be searched with an OR. The third argument optionally specifies the position of the child. i.e. `times,[x,y]` checks whether there is a multiplication that has a variable x or a variable y as a descendant. `divide,[x,y],2` checks whether the denominator of a fraction has a variable x or a variable y in it. contains_variable_other_than The user answer does not contain any other variable than the one in the list in the Definition field, separated by ;, e.g. `x;y` means that only the variables x or y may be present in the user answer. default_incorrect Always reacts on wrong answers and has a predefined priority of 99. eq_one_side One side of the equation must be equal to the variable in the Definition. e.g. `x` means the the answer must be either something like x=...x=... or ...=x...=x eval_domain Checks whether the user input is equal to the domain in Definition field where both should be in the form of a simplified equation in the disjunctive normal form with only one variable, e.g. `x=3 or x=-3`. eval_eq_exact Check whether solutions indicated in the Definition field are solutions to the equation in the user input, using substitution. Define a list of equations in the Definition field that should be substituted in the equation the user input. eval_eq_numeric Numerical check whether solutions indicated in the Definition field are solutions to the equation in the user input. The Precision field indicates the accepted margin of error. Define a list of variables in the Definition field that should be substituted in the equation the student answers. e.g. `[x=3,y=4]` when correct answer: x2+y=13x2+y=13. eval_exact Exact mathematical comparison of expression in the Definition field with user input. No simplification rules are applied to the student answer. eval_graphs Lines: Checks whether each pair of points from the user input is on a line defined in the Definition field and whether each line in the Definition fields has two points in the user input. e.g. `x=y+1`​Points: Checks whether each point from the user input is defined once in the Definition field. e.g. `[2,1]`​Vector: Checks whether the start and end point of the vector from the user input is defined in the Definition field via a 2x2 matrix. Define the vector via a matrix e.g. `matrix([0,0],[2,1])` eval_interval Checks whether the interval provided by the student is equal to that in the Definition field, where the Definition is specified as a 1st or 2nd degree (in)equality. The variable you use is free, as long you do not use more than one. e.g. `x^2+3*x >= 0` for [0,∞)∪(−∞,−3][0,∞)∪(−∞,−3] Note that automatic feedback is given for answers that have [−∞[−∞ or ∞]∞]. eval_lin_eqs Evaluate a system of linear equations. As a Definition, write the maxima equations in disjunctive normal form, and after that write a ";" with a list of variables in "[]" and separated with a comma ",". e.g. `(2*x=2) and (3*y=2) and (2*z=5) ; [x,y,z]` Optionally, use a third argument and set it to `1` to escape the mandatory final form of the answer. eval_list Checks if the answer is a list and if each expression is equal to the expression at the same index in the list of the Definition field, using eval normal. The list in the Definition field should be comma "," separated. e.g. [2,3,1]. Note that this evaluation types automatically checks for the right input form (list or vector) and the length of the list and gives appropriate feedback accordingly. eval_logic_equiv Comparison of logical form in the Definition field with normal form of user input. eval_matrix Check if the matrix from the Definition field is equal to the answer. Can be used with fb_matrix for feedback. It accepts input of matrix or a list of lists. e.g. `matrix([1,2,3],[4,5,6])` or `[[1,2,3],[4,5,6]]` eval_matrix_element Numerically compares the [row,column] entry of the matrix from the user input [row,col]=...with the number represented by the expression in the Definition field.E.g. `[1,1]=2` means that the value 2 must be equal to the matrix element on dimension [1,1] eval_normal Exact mathematical comparison of normal form of expression in the Definition field with normal form of user input. e.g. `x^2`. eval_numeric Numeric comparison of expression in the Definition field with user input, e.g. `2*3`.The Precision field defines the accepted absolute value of the margin of error for numerical answers, e.g. if the correct answer is 1, you can use 0.1 to accept all answers between 0.9 and 1.1.If any of the Range fields are used (not 0 or empty), the system checks whether the answer is within the range. eval_openmath Comparison between the OpenMath xml object in the Definition field and the result object of the student input in the formula editor. To create a solution, get the Transformed OpenMath from the editor here. eval_param_rep Evaluate a parameter representation of the solution set of a list of linear equations. In the Definition field, use 2 arguments (separated with a ;), where the first is the list of linear equations [eq1,eq2,...] and the second is a list of the coordinates [x,y,...]. Optionally, you can add a third argument to prescribe the parameters that may be used, like [lambda,mu]. e.g. `[z-y+2*x-1=0,3*z+11*y-4*u+9=0];[x,y,z,u]` or with a third argument `[z-y+2*x-1=0,3*z+11*y-4*u+9=0];[x,y,z,u];[lambda,mu]` eval_polynomial Automated polynomial checker that can be used together with fb_polynomial. In the Definition field a (multivariate) polynomial is entered to specify the correct answer. Then you can create just one positive and one negative feedback rule in with evaluation type fb_polynomial that will provide automated feedback. Feedback works for `basic`, `free` (any polynomial), `expanded` and `factored` form. See `fb_polynomial` for more information about these form types. eval_rational_function Automated checker for rational functions that can be used together with `fb_rational_function`. In the Definition field a rational function is entered to specify the correct answer, e.g. `(x^2+1)/(x+6)`. Then you can create just one positive and one negative feedback rule in with evaluation type `fb_rational_function` that will provide automated feedback. Feedback works for `basic`, `combined` , `split` and `quotient` form. See fb_rational_function for more information about these form types. eval_statement Evaluate the maxima statement in the Definition field, where the user input can be referenced using `answer` for the answer that belongs to the rule, or `answers` for alist of the answers in all answer fields like `[1,2,3]`. In case an answer value is empty, the answer value to maxima gets replaced with `%null` in the answers list. A simple example of the usage of `answer` is e.g. `elementp(answer,{sin(1),sin(2),sin(3)})`. Or you can write your own maxma block function. For instance, you can differentiate the answer to check if it is a valid integral by automatically differentiation away the constants. e.g. for the integral of sin(x)sin⁡(x) you could use`block(adiff:diff(answer,x),is(radcan(adiff-(sin(x)))=0))`to allow for all answer that are correct after differentiating them, like −cos(x)+c−cos⁡(x)+c, but also −cos(x)+C−cos⁡(x)+C​Normally the answer field specifies the answer.For input graphs all answers are checked against the statement and the answer form is​Lines: `[[x_1,y_1],[x_2,y_2]]`​Points: `[x,y]`​Vector: `[[x_1,y_1],[x_2,y_2]]` eval_units Converts the answer to base units and the compares the value and unit. For units support, maxima's ezunits package is used. In the Definition field you can specify the solution with a backtick ``` between the value and the unit, like `1`g`.The Precision field defines the accepted absolute value of the margin of error in terms of the base unit specified in the Definition field, e.g.​Definition `10`g` with Precision `0.1` accepts all answers between and including 9.9 and 10.1 grams.If any of the Range fields are used (not 0 or empty), the system checks whether the answer is within the range. e.g.​Low `0.9`m` and High `1.2`m` accepts all answers between 0.9 and 1.2 meter.For supported units and their notation, have a look at the Units table. eval_vector_rep Checks whether the vector representation of the user input corresponds to the line defined by the linear equation in x and y in the Definition field. e.g. `y+3*x=1` eval_vector_lin Checks whether the two dimensional vector of the user input and the two dimensional vector in the Definition field are linearly dependant. e.g. `[2,1]` fb_generic Provides automatic negative feedback on the student answer. The student answer will be compared with the expression in the Definition field of this feedback rule. This feedback type is particularly good at pointing out minor mistakes in the student answer. Use the Precision field to indicate a minimum percentage of similarity between the Defintion and the answer at which the feedback kicks in (0 is the default). fb_lin_eqs Use only with a solution rule that uses evaluation type eval_lin_eqs to give feedback the following specified cases. Use one of the following in the Definition field.- `1` or `nonlinear`: the answer contains a nonlinear equation- `2` or `toobig`: each solution of the original system of equations occurs in the answer, but at least one solution of the answer is not a solution of the original system- `3` or `toosmall`: each solution of the answer is correct, but at least one solution of the original system does not appear in the answer- `4` or `incomparable`: the answer is incomparable- `5` or `strangevar`: the answer contains a variable that is not an unknown- `6` or `noequation`: at least one of the expressions separated by the logic symbols is not an equation- `7` or `andornestingtoodeep`: the nesting of the logic symbols is too complicated. We only accept answers in which the or symbol never appears in an expression that consists of two or more parts separated by an and symbol​ fb_matrix Use only with a solution rule that uses evaluation type eval_matrix to give feedback the following specified cases. Use one of the following in the Definition field.- `2` or `wrong_length`: answer does not have the same dimensions as the matrix in the Definition field of the solution- `3` or `wrong_matrix`: answer does have the right dimensions but is wrong- `4` or `no_matrix`: The answer does not evaluate to a matrix.​ fb_param_rep Use only with a solution rule that uses evaluation type eval_param_rep to give feedback the following specified cases. Use one of the following in the Definition field.- `2` or `no_vector`: answer is not a vector- `3` or `wrong_length`: answer does not have the right length- `4` or `wrong_basevec`: the base vector of the answer is not a solution of the equations- `5` or `too_few_params`: answer does not have enough parameters- `6` or `too_many_params`: answer has too many parameters- `7` or `wrong_params`: the parameters in the answer are not as required- `8` or `non_linear`: answer is non-linear on one of the parameters- `9` or `wrong_vector`: answer has at least one vector that is not a solution of the equations- `10` or `lin_dep`: the direction vectors in the answer are linearly dependent​ fb_polynomial Provides automated feedback coming from eval polynomial in the solution. The value in the Definition specifies what type of polynomial form is desired. The value in the Definition van be​`free`: Polynomial in free form. Performs no form checks.​`basic`: Polynomial in basic form. Positive/Negative feedback checks are the same:​Invalid variablesMissing variablesInvalid operationsNon-constant exponentsDividing by non-constantsNon-integer exponentsNegative exponents`expanded`: Polynomial in expanded form.Positive feedback checks:​All basic checksCheck for non-atoms under exponents, i.e. (x y)^3Check for multiplication by non-constant non-atoms, i.e. (x + 1) 2Check for variables appearing twice in multiplication, i.e. x^2 y x^3Check for monomials appearing multiple times, i.e. x + x + xNegative feedback checks:​All basic checksCheck if degrees matchCheck if there are superfluous monomialsCheck if there are monomials missingCheck for wrong coefficients`factored_basic`: Polynomial in factored form.Postive feedback checks:​All basic checksCheck if polynomial is factorized more then the authors answer.Performs positive feedback checks for expanded polynomial against each factor.Negative feedback checks:​All basic checksCheck if all factors divide the authors answer.Check if there are factors missing.Check if the constant is right.`factored_basic_count`: Sames as `factored_basic`, but with an extra positive feedback check if the number of factors are correct.​​`factored_expanded`: Polynomial in factored form.Postive feedback checks:​All basic checksCheck if polynomial is factorized more then the authors answer.Negative feedback checks:​All basic checksCheck if all factors divide the authors answer.Check if there are factors missing.Check if the constant is right.`factored_expanded_count`: Sames as `factored_expanded`, but with an extra positive feedback check if the number of factors are correct.​ fb_rational_function Use only with a solution rule that uses evaluation type eval rational function to give feedback on the following specified cases. Use one of the following in the Definition field:- `basic`: Answer should be constructed using standard operations [+, -, *, /] and raising to integral exponents- `combined`: Answer should be given as P / Q with P, Q coprime polynomials.- `split`: Answer should be given as a sum P + sum P_{ij} / Q_i^j, with the Q_i irreducible and deg(P_{ij}) <= deg(Q_i).- `quotient`: Answer is p/q with p and q polynomials. Not necessarily coprime.​ fb_solve_in(eq)previously called domain_dependence Use only with a solution rule that uses evaluation type solve_inequality or solve_equality to give feedback on how the domain of the answer compares to the domain of the solution. Use one of the following in the Definition field.- `0` or `none`: the answer domain is neither in nor around the solution domain- `2` or `inside`: The answer is in the solution domain, but it does not contain it; it is too small.- `3` or `contains`: The answer contains the solution domain, but is not contained in it; it is too big. fraction_denominator Checks whether the user input contains a fraction with another denominator as defined in the Definition field. e.g. `4` fraction_diff_denominators When the user input has more than one fraction, it checks whether all fractions have the same denominator. fraction_is_improper Checks whether the absolute value of all fractions in user input is greater than or equal to one fraction_lcm_not_used Checks for each fraction in user input if the denominators are not equal to or greater than the number in the Definition field. fraction_not_simplified Checks whether all fractions in the user input are simplified. In the Definition field you can use the same values as for is_not_simplified_fraction to control what type of fractions are considered simplified. is_decimal_length Checks whether the user input is a float with the same number of decimals as specified in the Definition field, optionally specified by one of le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =E.g. gt2 checks whether the answer contains a float with more than two decimals. is_length Checks whether the user input is a float or integer with the same length as specified in the Definition field, optionally specified by one of le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =. eg. gt 2 is_not_factorized Comparison of the factors in the Definition with the factors of the answer. e.g. Definition `(x-3)*(x+2)` can be used when it's asked to factorize x2−x−6x2−x−6 is_not_float Check whether the user input is not a float. is_not_fraction Check whether the user input is not a fraction. is_not_ifactorized Checks if the answer is decomposed into prime factors. No Definition is needed. is_not_integer Checks whether the user input is not an integer. is_not_number Checks whether the user input is not an integer and not a float. is_not_polynomial Checks if the answer is a polynomial in the variables in the list from the Definition field.With two arguments, the second is a test for the grade. e.g. `x;le6` checks if the answer is a polynomial in x of degree at most 6. is_not_rational Check whether the user input is either an integer or a fraction with the denominator unequal to zero. is_not_simplified_fraction Checks whether the user input is a simplified fraction. Also works for equations, where it checks whether at least one side is a simplified fraction. With Definition set to- `1` the final form must be a proper fraction or integer like 112112, 11 or 1212 but not 3232 or 4242. The minus must be in front of the fraction.- `2` allows for both proper and improper fractions and integers like 112112 and 3232 but not 4242. The minus is not allowed in the denominator.- `3` same as 1, only also float values will be accepted.- `4` same as 2, only also float values will be accepted.- otherwise it only allows improper fractions and integers like 1212 or 3232 but not 112112. The minus is not allowed in the denominator. is_not_simplified_root Checks whether the answer (which is assumed to be an expression involving integers, multiplications, divisions, and higher roots) is in the normal form (a/b) * (c-th root of d), where b,c,d are positive integers and a is an integer. is_not_simplified_complex Checks whether the answer is not in the form `a+b*i`, `b*i`, `i` or `c` where `a`,`b` and `c` are either simplified fractions, floats or integers and `a` and `b` are not `0` and, in the case of `a+b*i`, there's no minus in `b*i`. Examples of allowed forms are3+2i,3+i,−3−2i,0,2,12+12i,2i,2.2i,1.5+0.5i,0.5,343+2i,3+i,-3-2i,0,2,12+12i,2i,2.2i,1.5+0.5i,0.5,34Examples of disallowed forms are0+i,1+0i,1+42i,22+2⋅i,1+1+i,1+i2,1+−2i,1−−2i,420+i,1+0i,1+42i,22+2⋅i,1+1+i,1+i2,1+-2i,1--2i,42 is_not_top_symbol Checks whether the symbol with the highest precedence in the answer is not equal to one of the symbols in the Definition field. Define a list of one or more symbols in the Definition field. e.g. times;root means the highest symbol is either a times or a root symbol. is_not_vector_length Check whether the user input has all vectors of the same length. Optionally, use an integer in the Definition field to expect a vector with the prescribe the length, optionally specified by one of le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =E.g. gt2 checks whether the answer is a vector with more than two elements. is_not_unit Check whether the student answer is a unit. With no Definition specified (empty), a check will be done whether the student answer is a unit. The Definition can be used to specify the unit(s) that must be used in the answer, like `gram`. When multiple units are needed, you can use a list (separated with a comma) of units that must be used in the answer, like `gram,liter` for g/l. By default, all prefixes are allowed to be used. However, per unit, you can specify which prefixes are allowed by specifying a preceding list of prefixes between square brackets, like `gram[centi,milli]`. If you want to allow for a unit to be used without a prefix, like `m`, then use the prefix `one`, like `[one,kilo;centi]meter,[one,kilo;centi]gramme`. same_form Checks the answer and the definition for having exactly the same form after maxima translation solve_equation Automatically solve and give feedback on 1st or 2nd degree equation. This type is limited to one variable equations. e.g. `x^2=9` solve_inequality Evaluate the inequality in the Definition field and evaluate the student answer accordingly. This type is limited to one variable inequalities. e.g. `x^2<9` significant_digits Checks if the number of significant digits present in the student answer is equal to the integer in the definition field. Optionally specified by one of le, lt, ge, gt, ne, eq, <=, >=, <>, ==, !=, <, >, =. e.g. `>= 2` is triggered whenever the number of significant digits is greater than `2`. is_not_scientific_notation Checks if the student answer is in scientific notation. I.e. `a*10^n` where `n` is an integer and `1 <= a < 10`.