first-order predicate logic