Semantics of First-Order Logic