public void testMp() {
		boolean thrown = false;
		Proof test = new Proof(null);
		try {
			test.extendProof("show ((a=>(b=>c))=>((a=>b)=>(a=>c)))");
			test.extendProof("assume (a=>(b=>c))");
			test.extendProof("show ((a=>b)=>(a=>c))");
			test.extendProof("assume (a=>b)");
			test.extendProof("show (a=>c)");
			test.extendProof("assume a");
			test.extendProof("mp 2 3.2.1 (b=>c)");
			//2 is (a=>(b=>c))
			//3.2.1 is a
			//3.2.2 is (b=>c)
			//No conclusion made.
			test.extendProof("mp 3.2.1 3.2.2 b");

		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}
		assertTrue(thrown);
		thrown = false;
		try { //Incorrect inputs.
			test.extendProof("mp 1 a");
		} catch (IllegalLineException l) {
			thrown= true;
			assertEquals(l.getMessage(), "Wrong number of things.");
		} catch (IllegalInferenceException e) {
		}       
		assertTrue(thrown);
		thrown = false;
		try { 
			test.extendProof("mp 3.2.1 3.1 b");
			//3.2.1 is a
			//3.2.3 is b
			//No conclusion can be made.
			test.extendProof("mp 3.2.1 3.2.3 p");
		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertTrue(thrown);	
		thrown = false;
		try { 
			//3.2.3 is b
			//3.2.2 is (b=>c)
			//Wrong conclusion made.
			test.extendProof("mp 3.2.3 3.2.2 e");
		} catch (IllegalLineException l) {
		} catch (IllegalInferenceException e) {
			thrown= true;
		}       
		assertTrue(thrown);	
	}