private FieldRule<F> internalRuleFromField(F field, Set<F> knownNonMines) {
		List<F> ruleParams = new ArrayList<F>();
		int foundNeighbors = 0;
		int fieldValue = getFieldValue(field);
		for (F neighbor : getNeighbors(field)) {
			if (isDiscoveredMine(neighbor)) 
				foundNeighbors++;
			else if (!isClicked(neighbor))
				ruleParams.add(neighbor);
		}
		
		if (fieldValue - foundNeighbors == 0) {
			if (knownNonMines != null) {
				for (F mf : ruleParams) {
					if (!knownNonMines.contains(mf)) {
						knownNonMines.add(mf);
					}
				}
			}
			return null;
		}
		else return new FieldRule<F>(field, ruleParams, fieldValue - foundNeighbors);
	}