The process of attaching meanings to the expressions of a formal language—or the meanings so attached. Without interpretation, expressions are purely formal entities, neutral with respect to meaning; this neutrality allows one to separate syntactic from semantic concerns, and to consider different interpretations for one formal language. The following are examples: propositional logic interpretations attach Boolean values to primitive symbols; predicate logic interpretations involve relations or functions over some underlying set; algebras similarly attach sets and functions to the symbols of a signature. Interpretations are made in the semantics of programming languages. An interpretation can give completely arbitrary meanings to primitive symbols. By contrast, a model must also satisfy certain logical sentences.