<?xml version="1.0" encoding="UTF-8"?>
<quiz>
  <question type="stack">
    <name>
      <text>Parsons' proof template</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p>Prove the following theorem.</p>
<p><b>Theorem:</b> {@thm@}</p>
[[parsons input="ans1"]]
{# parsons_encode(proof_steps) #}
[[/parsons ]]
<p>[[input:ans1]] [[validation:ans1]]</p>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[[[comment]]
This parsons' input will automatically feedback a model solution (the "teacher's answer") unless the input option 'hideanswer' is used or the PRT is on quiet respectively. 
Below are examples of how to format the worked solutions using the proof_display functions.
[[/comment]]

[[if test='len1=2' ]]
Notice this proof has sub-proofs, which can occur in any order.  Therefore, we have multiple correct versions of this proof. For example:
<table><tr>
<td><div class="proof">{@proof_display_para(tal[1], proof_steps)@}
<td><div class="proof">{@proof_display_para(tal[2], proof_steps)@}
</tr></table>
Can you see the differences between these proofs?
[[/if]]
[[if test='len1>2' ]]
{@proof_display_para(tal[1], proof_steps)@}
[[/if]]
[[if test='len1<2' ]]
{@proof_display_para(tal[1], proof_steps)@}
[[/if]]]]></text>
    </generalfeedback>
    <defaultgrade>1</defaultgrade>
    <penalty>0.1</penalty>
    <hidden>0</hidden>
    <idnumber/>
    <stackversion>
      <text>2024092500</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[stack_include_contrib("prooflib.mac");

/* STACK is distributed with a number of pre-written proofs.   See
   https://github.com/maths/moodle-qtype_stack/tree/master/stack/maxima/contrib/proofsamples
*/
/* Load proof here, change `inf-primes.mac` for your chosen proof. */
stack_include_contrib("proofsamples/inf-primes.mac");
/*stack_include_contrib("proofsamples/harmonic-series.mac");*/

/* The variable "proof_steps", etc., are defined in the above file.  Permute the steps randomly. */ 
proof_steps: random_permutation(proof_steps);

/* Generate the alternative proofs. */
tal: proof_alternatives(proof_ans);
len1: length(tal)
/* Below is one "wrong" answer generated by sorting the correct answer keys. */
wa1:apply(proof,sort(args(proof_flatten(tal[1]))));


/* Create a set of flattened proofs. */
tas: setify(map(proof_flatten, tal));]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text>[[feedback:prt1]]</text>
    </specificfeedback>
    <questionnote format="html">
      <text>{@ map(first, proof_steps) @}</text>
    </questionnote>
    <questiondescription format="html">
      <text>This question is a template for importing proofs from the STACK contrib directory.  See
https://github.com/maths/moodle-qtype_stack/tree/master/stack/maxima/contrib/proofsamples

It also demonstrates how to create sample Parsons problems.  In particular, how to use the Parsons function to give tailored feedback about what stages are incorrect.</text>
    </questiondescription>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text><![CDATA[<span style="font-size: 1.5em; color:green;"><i class="fa fa-check"></i></span> Correct answer, well done.]]></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text><![CDATA[<span style="font-size: 1.5em; color:orange;"><i class="fa fa-adjust"></i></span> Your answer is partially correct.]]></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text><![CDATA[<span style="font-size: 1.5em; color:red;"><i class="fa fa-times"></i></span> Incorrect answer.]]></text>
    </prtincorrect>
    <decimals>.</decimals>
    <scientificnotation>*10</scientificnotation>
    <multiplicationsign>dot</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>[</matrixparens>
    <isbroken>0</isbroken>
    <variantsselectionseed/>
    <input>
      <name>ans1</name>
      <type>parsons</type>
      <tans>[proof_ans, proof_steps]</tans>
      <boxsize>15</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint/>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords/>
      <allowwords/>
      <forbidfloat>1</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>0</mustverify>
      <showvalidation>0</showvalidation>
      <options/>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text>sa: parsons_decode(ans1);
[pd, saa]:proof_assessment(sa, proof_alternatives(proof_ans));</text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <description/>
        <answertest>AlgEquiv</answertest>
        <sans>pd</sans>
        <tans>0</tans>
        <testoptions/>
        <quiet>1</quiet>
        <truescoremode>=</truescoremode>
        <truescore>1</truescore>
        <truepenalty/>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt1-1-T</trueanswernote>
        <truefeedback format="html">
          <text/>
        </truefeedback>
        <falsescoremode>=</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty/>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-1-F</falseanswernote>
        <falsefeedback format="html">
          <text>{@proof_assessment_display(saa, proof_steps)@}</text>
        </falsefeedback>
      </node>
    </prt>
    <deployedseed>263493547</deployedseed>
    <deployedseed>2080086703</deployedseed>
    <deployedseed>2119685624</deployedseed>
    <deployedseed>2065386162</deployedseed>
    <deployedseed>1272837801</deployedseed>
    <deployedseed>2105511895</deployedseed>
    <qtest>
      <testcase>1</testcase>
      <description>Test case assuming the teacher's input gets full marks.</description>
      <testinput>
        <name>ans1</name>
        <value>apply(parsons_answer,[tal[1], proof_steps])</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty>0.0000000</expectedpenalty>
        <expectedanswernote>prt1-1-T</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>2</testcase>
      <description><![CDATA[One incorret answer, based on "sorting" the correct answer keys.]]></description>
      <testinput>
        <name>ans1</name>
        <value>apply(parsons_answer,[wa1, proof_steps])</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty>0.1000000</expectedpenalty>
        <expectedanswernote>prt1-1-F</expectedanswernote>
      </expected>
    </qtest>
  </question>
</quiz>
