An assessment and feedback package for Maxima



Dear all,

Following the experience with developing the STACK computer aided 
assessment package, I've written some Maxima code which I think will be 
useful to other projects which use Maxima.  In particular, I'd like to 
contribute an assessment and feedback package for Maxima.

I envisage this will enable other project to do such things as

* establish two expressions are "equivalent" in various senses

* provide feedback of the kind
    "Your expression is not factored, you need to do more work on the term ...."

* establish mathematical properties of simple expressions, e.g. this is 
continuous at $x=a$.

and so on.

Rather than performing computations, the focus will be on establishing 
mathematical properties of expressions, based on a set of assumptions 
sensible for elementary mathematics education, college algebra students 
and initial university mathematics.

I can imagine hairs on the back of some heads rising here, as many of 
these questions are formally undecidable!  As Fenichel comments in his PhD 
thesis "recursive undecidability can be a remote and unthreatening form of 
hopelessness".  This is certainly our experience of using Maxima for 
STACK.

In this sense I'd like to take the Maxima code "out of STACK" and enable 
other collaborators to make use of this and contribute to it.

I'm emailing to alert people I'm doing this, and welcome comments, 
suggestions, and offers of collaboration.

I also would like to ask some practical questions about how to code up for 
possible inclusion in Maxima as a contrib package.

(1) How is multi-language support implemented in Maxima?

As a practical example, currently the code I use in STACK returns strings 
of the form

stack_trans('FacForm_UnPick_morework' , $x^2-4$ );

The function "stack_trans" is a PHP function which later translates the 
language independent tag 'FacForm_UnPick_morework' and optional argument 
$x^2-4$ into actual feedback for the student such as

   "Your expression is not factored, you need to do more work on the term 
$x^2-4$."

These tags enable multi-language versions of STACK, without the 
translators needing to hunt around.

In the contributed package, I'd like Maxima to return sensible messages to 
Maxima desktop users, and also preserve the current STACK functionality. 
Any suggestions here about coding style, existing approaches to this etc 
etc.?

(2) Unit testing

I already have a large number of unit tests for the functions we use, and 
am mostly very happy with the way they work for STACK's purposes.  How 
should I code up unit tests for Maxima?

Many thanks,
Chris