Hilbert's nullstellensatz and an algorithm for proving combinatorial infeasibility