boolean tryPlan(Plan p, int depth)		//try Plan within given depth
		{
			if(depth < 0)						
				return false;
			
			if(usableFormulaStatic(p.action))		//if all reqs are known, apply DynamicFormula
			{
				evaluateStaticFormula(p.action);
				return true;
			}
			else
			{
				if(p.subgoals.size() == 0)		//no subgoals, make em
				{
					for(String r: p.action.Reqs)	//for each unknown, a subgoal
					{
						if(!KnownValues.containsKey(r))
						{
							p.subgoals.add(new Goal(r));
						}
					}
				}
				
				int achieved = 0;					//counts how many achieved
				for(Goal g: p.subgoals)
				{
					if(g.achieved)
						achieved++;
					else if(trySubGoal(g, depth-1))		//try unachieved subgoals (with one less depth)
						achieved++;
				}
				
				if(achieved == p.subgoals.size())
				{
					evaluateStaticFormula(p.action);
					return true;
				}
				else
					return false;
			}
		}