This is a Request For Comment [and suggestions] because I do not believe there is a unique Solution.
I have been revising a variety of my problems to rely on MathObjects. Updating a problem statement & answer has been fairly straight-forward, but revising a solution has taken more effort because fragments of expressions can be important in that context.
A problem I have used as part of assessing whether a student in a Precalculus class is ready-to-go asks:
Solve $a x + $b ($c + x) = $d (x + $e)
If a=6 and b=-5, then my old version used FEQ to display the equation as
6 x - 5 (c + x) = d (x + e) [with explicit values for c,d,e].
Also using FEQ, intermediate steps of a solution replaced "(6 + (-5)) x" with "(6 - 5) x" and "1 x" with "x".
An example is attached in a .ZIP (with 3 files):
equation01.pg
equation01-screenshot.png
PGcourse.pl ## loads & enables ProblemRandomize.pl
The screenshot of my updated version shows "6 x + (-5) ($c + x)" instead of "6 x - 5 ($c + x)" and "(6 + (-5)) x" instead of "(6 - 5) x", etc. Replacing current definition of $LHSa in equation01.pg
$abFEQ = FEQ( "$a + $b" ) ;
$LHSa = Formula( "($abFEQ)*x + $b*$c" ) ;
would display "(6 -5) x" instead of "(6 + (-5)) x". For an elementary algebra course, I would want the finer control to select which of several equivalent expressions was presented during a solution.
FWIW: I am content with detail in display of Correct.
Bottom Line: Although I will welcome suggestions, I suspect crafting a correct solution and tailoring to a particular audience will require cosmetic controls beyond what MathObjects supplies (or should supply).
Hi Dick,
MathObject Formulas have a method "reduce" that helps. For example, if $a = 2 and $b = -3, then
Formula("$a+$bx") will be 2+(-3)x,
but Formula("$a+$bx")->reduce will be 2-3x.
The reductions that get applied are here:
http://webwork.maa.org/wiki/List_of_parser_reduction_rules_for_MathObject_Formulas
(And sometimes it's useful to turn some of them off, as the top of that pge explains how to do.)
MathObject Formulas have a method "reduce" that helps. For example, if $a = 2 and $b = -3, then
Formula("$a+$bx") will be 2+(-3)x,
but Formula("$a+$bx")->reduce will be 2-3x.
The reductions that get applied are here:
http://webwork.maa.org/wiki/List_of_parser_reduction_rules_for_MathObject_Formulas
(And sometimes it's useful to turn some of them off, as the top of that pge explains how to do.)
Thanks, Alex, for your reference to the wiki page with a List of Parser Reduction Rules.
My example includes
Context() -> flags -> set(reduceConstants => 0) ;
$LHS = Formula( "$a * x + $b * ($c + x)" ) ;
$RHS = Formula( "$d * (x + $e)" ) -> reduce ;
and adding "-> reduce" to $LHS does not fix an issue involving scope of that reduction. E.g., if a=-5, b=-4, c=-6, that reduced $LHS would display as -(5x + 4(x-6)) rather than -5x - 4(-6 + x). [There are pedagogical reasons why I want students to confront the latter form.] An alternative definition of $LHSa shows one way to manage the pieces (sometimes):
$abFeq = FEQ( "$a + $b" ) ;
$LHSa = Formula( "($abFeq)*x + $b*$c" ) ;
My example includes
Context() -> flags -> set(reduceConstants => 0) ;
$LHS = Formula( "$a * x + $b * ($c + x)" ) ;
$RHS = Formula( "$d * (x + $e)" ) -> reduce ;
and adding "-> reduce" to $LHS does not fix an issue involving scope of that reduction. E.g., if a=-5, b=-4, c=-6, that reduced $LHS would display as -(5x + 4(x-6)) rather than -5x - 4(-6 + x). [There are pedagogical reasons why I want students to confront the latter form.] An alternative definition of $LHSa shows one way to manage the pieces (sometimes):
$abFeq = FEQ( "$a + $b" ) ;
$LHSa = Formula( "($abFeq)*x + $b*$c" ) ;
Absolutely. I completely agree with the pedagogy, and that's why I almost always turn off one or two of the reductions.
This line:
Context()->reduction->set('(-x)-y'=>0);
will stop -x - y from being reformatted as -(x + y). And the ->reduce method will (probably) still do everything you would like it to do.
I also usually like to turn off '(-x)+y', which reorders -x + y into y - x.
This line:
Context()->reduction->set('(-x)-y'=>0);
will stop -x - y from being reformatted as -(x + y). And the ->reduce method will (probably) still do everything you would like it to do.
I also usually like to turn off '(-x)+y', which reorders -x + y into y - x.
Many thanks, Alex, for pointing out something which I had overlooked --- our ability in MathObjects to control which individual reduction rules are applied or disabled. On the other hand, it is not clear how this might simplify writing of a solution (template) which refers to various parts of an answer expression.
FWIW, the example posted with my query was generalized from a problem with a known relation between $a$ and $b (which was exploited during a subsequent solution). My immediate question involves ways to adapt that as the problem task is generalized.
an aside: my time-to-create a problem+solution seems to average between 1:2 and 1:3 for (problem plus structured answer) : (solution which copes with parameter choices). For those occasions where I am slow in composing an algorithmic presentation of a solution, I am glad for the fall-back of displaying a structured expression as an answer. (Quoted stuff in old style, use Formula or Compute now.)
FWIW, the example posted with my query was generalized from a problem with a known relation between $a$ and $b (which was exploited during a subsequent solution). My immediate question involves ways to adapt that as the problem task is generalized.
an aside: my time-to-create a problem+solution seems to average between 1:2 and 1:3 for (problem plus structured answer) : (solution which copes with parameter choices). For those occasions where I am slow in composing an algorithmic presentation of a solution, I am glad for the fall-back of displaying a structured expression as an answer. (Quoted stuff in old style, use Formula or Compute now.)