The is_canonical method should take an optional argument named "mode". By default mode should take the value "eager". An expression is in canonical form if one of the following is met: - the root node is an instance of Lam - the root node is an instance of BooleanConstant - the root node is an instance of NaturalConstant - the root node is an instance of UnaryOperator who's operation is "-", and it's operand is a NaturalConstant - in mode "normal", if the root node is an instance of Tuple - in mode "eager", the root node is an instance of Tuple, and every sub-expression of the tuple is in canonical_form as well Tasks: - adapt method - add correspondent tests cases