public void testMt() {
		boolean thrown=false;
		Proof test = new Proof(null);
		try {        
			test.extendProof("show ((a=>q)=>((b=>q)=>((a|b)=>q)))"); 
			test.extendProof("assume (a=>q)");
			test.extendProof("show ((b=>q)=>((a|b)=>q))");
			test.extendProof("assume (b=>q)");
			test.extendProof("show ((a|b)=>q)");
			test.extendProof("assume (a|b)");
			test.extendProof("show q"); 
			test.extendProof("assume ~q"); //Line 3.2.2.1
			//Negate statement first, then implication.
			test.extendProof("mt 3.2.2.1 2 ~a"); //Line 3.2.2.2
		} catch (IllegalLineException l) {
			thrown= true;
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertFalse(thrown);
		thrown=false;
		try { 
			//3.2.2.2 is ~a
			//3.2.2.1 is ~q
			//Not a valid conclusion.
			test.extendProof("mt 3.2.2.2 3.2.2.1 ~a");
		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertTrue(thrown);
		thrown=false;
		try { 
			//2 (a=>q)
			//3.2.2.1 is ~q
			//Concluded statement is wrong.
			test.extendProof("mt 2 3.2.2.1 d");
		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertTrue(thrown);
		thrown=false;
		try { 
			//2 (a=>q)
			//3.2.2.1 is ~q
			//Implication statement then negated statement. 
			//Order doesn't matter.
			test.extendProof("mt 2 3.2.2.1 ~a");
		} catch (IllegalLineException l) {
			thrown= true;
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertFalse(thrown);
	}