public boolean subsumes(Object general, Object specific)
	{
		HGRelType grel = (HGRelType)general;
		HGRelType srel = (HGRelType)specific;
		if (general == null || specific == null)
			return general == specific;
		if (!grel.getName().equals(srel.getName()) || grel.getArity() != srel.getArity())
			return false;
		for (int i = 0; i < grel.getArity(); i++)
		{
			HGHandle g = grel.getTargetAt(i);
			HGHandle s = srel.getTargetAt(i);
			if (g.equals(s))
				continue;			
			else
			{
				HGAtomType gt = graph.getTypeSystem().getAtomType(g);
				HGAtomType st = graph.getTypeSystem().getAtomType(s);
				if (!gt.equals(st) || !gt.subsumes(graph.get(g), graph.get(s)))
					return false;
			}
		}
		return true;
	}