public void newDeduction(Formula proven) {
		for(Class<? extends ForwardRule> rule : ForwardRule.forwardRules()) {
			try {
				//Check if our formula matches the Class appropriate for the rule.
				if(Reflection.formulaClass(rule).equals(proven.getClass())) {
					// Check to see if the rule needs to check anything. (Different constructor profiles).
					if((Reflection.hasCheck(rule))) {
						//Check that we meet the requirements. (And return the requirements).
						Formula f = Reflection.check(rule, proven, getKnowledge());
						if(f != null) {
							List<Formula> input = new ArrayList<Formula>();
							input.add(proven);
							input.add(f);
							Deduction d = rule.cast(rule.getConstructor(List.class).newInstance(input));
							add(d);
						}
					} else {
						List<Formula> input = new ArrayList<Formula>();
						input.add(proven);
						Deduction d = rule.cast(rule.getConstructor(List.class).newInstance(input));
						add(d);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}