Constraint propagation is one of the basic forms of inference in many logic-based reasoning systems. In this paper, we investigate constraint propagation for first-order logic (FO), a suitable language to express a wide variety of constraints. We present an algorithm with polynomial-time data complexity for constraint propagation in the context of an FO theory and a finite structure. We show that constraint propagation in this manner can be represented by a datalog program and that the algorithm can be executed symbolically, i.e., independently of a structure. Next, we extend the algorithm to FO(ID), the extension of FO with inductive definitions. Finally, we discuss several applications.The first constraint states that mutually exclusive components cannot be selected both, the second one expresses that at least one module should be taken and the third one ensures that all courses of a selected module are selected. Consider a situation where there are, amongst others, two mutually exclusive courses c 1 and c 2 , that c 1 belongs to a certain module m 1 , and that at some point in the application, the student has selected m 1 and is still undecided about the other courses and modules. That is, an incomplete database or partial structure is given. One can check that in every total selection that completes this partial selection and satisfies the constraints, c 1 will be selected, c 2 will not be selected, and no module containing c 2 will be selected. Constraint propagation for FO aims to derive these facts.Given a theory T and a partial structureĨ, computing all the models of T that completeĨ, and making facts true (respectively false) that are true (respectively false) in all these models yields the most precise results. However, it is in general too expensive to perform constraint propagation in this way. The constraint propagation algorithm we present in this paper is less precise, but, for a fixed theory T , runs in polynomial time in the domain size ofĨ. The algorithm consists of two steps. First, T is rewritten in linear time to an equivalent theory T such that for each constraint in T , there exists a precise polynomial-time propagator. In the second step, these propagators are successively applied, yielding polynomial-time propagation for T , and hence for T .Besides its polynomial-time data complexity, our algorithm has two other benefits. First, the propagation can be represented by a set of (negation-free) rules under a least model semantics. Such sets of rules occur frequently in logic-based formalisms. Examples are Prolog, Datalog, Stable Logic Programming [Marek and Truszczyński 1999;Niemelä 1999], FO extended with inductive definitions [De-Often, we denote a formula ϕ by ϕ[x] to indicate that x is precisely the set of free variables of ϕ. That is, if y ∈ x, then y has at least one occurrence in ϕ outside the scope of quantifiers ∀y and ∃y. A formula without free variables is called a sentence. If ϕ is a formula, x a variable and t a term, then ϕ[x/t] denotes the result of replacing all free occurre...