Obsidian/Zettelkasten/Permanent Notes/20250818132018-predicate-logic.md
Dane Sabo ae0ab17291 Auto sync: 2025-08-18 16:54:48 (667 files changed)
R  "Zettelkasten/Hub Notes/NNFM Ontology.canvas" -> "NNFM Ontology.canvas"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Assembly/Assembly Canvas.canvas" -> "Programming/Assembly/Assembly Canvas.canvas"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Assembly/Untitled.md" -> Programming/Assembly/Untitled.md

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Formal Methods/LEAN/Learning Plan.md" -> "Programming/Formal Methods/LEAN/Learning Plan.md"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Formal Methods/LEAN/Tutorial World.md" -> "Programming/Formal Methods/LEAN/Tutorial World.md"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Formal Methods/TLA/TLA Canvas.canvas" -> "Programming/Formal Methods/TLA/TLA Canvas.canvas"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Formal Methods/TLA/TLA+ Learning Plan.md" -> "Programming/Formal Methods/TLA/TLA+ Learning Plan.md"

R  "Zettelkasten/Hub Notes/Permanent Notes/Programming/Formal Methods/TLA/What is TLA?.md" -> "Programming/Formal Methods/TLA/What is TLA?.md"
2025-08-18 16:54:48 -04:00

64 lines
1.6 KiB
Markdown

---
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)))$