first order predicate logic