--- id: 20250818132018 title: Predicate Logic type: permanent created: 2025-08-18T17:20:18Z modified: 2025-08-18T20:20:03Z tags: [] --- # Predicate Logic Predicate logic extends propositional logic by using predicates and quantifiers. - **Predicates** express properties or relations (e.g., $Pump(x)$ or $Connected(v,c)$). - **Quantifiers** let us say something about *all* or *some* in the domain. - $\forall$ = for all - $\exists$ = exists, at least one - $\exists!$ = there exists exactly one Predicates kind of look like functions: $Pump(x)$ means $x$ is a pump. **Relational Predicates** have two inputs: $Connected(x,y)$ means pump $x$ is connected to valve $y$ ## Examples Predicate logic requires you to *introduce the variable first*. This feels weird at first, but is mathematically explicit. The predicate does not define the input, it only defines the property! Here's an example: $\forall x (Pump(x) \rightarrow Working(x))$ Means that 'every pump works'. But, we define first a set x, then specify it is a pump for all x, and that they all of x, which are all pumps, work. What if we have one pump that doesn't work? $\exists x(Pump(x) \wedge \neg Working(x))$ ## Nested Qualifiers We can stack qualifiers and do some nifty things. How do we say: There exists one controller that stabilizes every plant? $ \exists k \forall G (Plant(G) \rightarrow Stabilizes(k,G))$ This is obviously not possible. So how do we say the opposite, that for any plant there exists at least one stabilizing controller: $ \forall G \exists k (Plant(G) \rightarrow (Controller(k) \wedge Stabilizes(k,G)))$