private int calculateMinN(List<Predicate> predicates) {
		
		count = new HashMap<String, Integer>();
		
		for(Predicate predicate : predicates) {
			if(predicate instanceof BinaryContains) {
				// ignore them for the time being
			} else if(predicate instanceof Contains) {
				this.addToCount(((Contains) predicate).getA().getName(), 1);
			} else if(predicate instanceof Exactly) {
				this.addToCount(((Exactly) predicate).getA().getName(), 
						((Exactly) predicate).getNum());
			} else if(predicate instanceof MoreThan) {
				this.addToCount(((MoreThan) predicate).getA().getName(), 
						((MoreThan) predicate).getNum() + 1);
			} else if(predicate instanceof LogicalPredicate) {
				if(predicate instanceof LogicalOr) {
					this.logicalOr((LogicalOr)predicate);
				} else if(predicate instanceof LogicalNot) {
					this.logicalNot((LogicalNot)predicate);
				}
			}
		}
		
		
		// finally, we build the sum of the count table
		int minN = 0;
		for(String key : count.keySet()) {
			minN += count.get(key);
		}
		
		return minN;
	}