Symbolic Logic and Formal Languages
Mathematics is communicated through a highly specialized formal language designed to eliminate the ambiguity inherent in natural languages. This language consists of a syntax (the rules for combining symbols) and a semantics (the meaning assigned to those symbols). Mastery of this notation is not merely about memorization; it is about understanding the logical structure of thought.
The Anatomy of a Proposition
A proposition is a declarative statement that is either true or false, but not both. In formal logic, we use letters () to represent these atomic propositions. The standard logical connectives allow us to build complex formulas:
- Negation (): is true if and only if is false.
- Conjunction (): is true if and only if both and are true.
- Disjunction (): is true if at least one of or is true (inclusive or).
- Implication (): is false only if is true and is false. It is logically equivalent to .
- Biconditional (): is true only if and have the same truth value.
Predicates and Quantifiers
While propositional logic handles whole statements, Predicate Logic (or First-Order Logic) allows us to look inside the statements. A predicate is a property that can be true or false depending on the value of the variable from a specified domain .
To make general statements about these variables, we use Quantifiers:
- The Universal Quantifier (): The statement asserts that is true for every element in the domain.
- The Existential Quantifier (): The statement asserts that there exists at least one element in the domain for which is true.
- Uniqueness Quantifier (): Often used to denote that there exists exactly one element satisfying the property.
Quantifier Scoping and Binding
The order of quantifiers is critical. For instance, consider the domain of real numbers :
- is True (every number has an additive inverse).
- is False (there is no single number that is the inverse for every ).
A variable is bound if it is within the scope of a quantifier; otherwise, it is free. A formula with no free variables is called a sentence and has a fixed truth value.
Set-Theoretic Notation
Sets are the fundamental building blocks of modern mathematics. We use consistent notation to describe relationships between elements and sets:
- Membership: ( is an element of ).
- Subset: ().
- Proper Subset: ( and ).
- Set Builder Notation: represents the set of all elements in that satisfy the predicate .
Standard Number Systems
Throughout this course, we refer to the following standard sets:
- : The set of Natural numbers (conventionally includes 0 in pure math).
- : The set of Integers .
- : The set of Rational numbers .
- : The set of Real Numbers (the completion of ).
- : The set of Complex Numbers .
Operational and Relational Symbols
Mathematical notation extends to operations (functions) and relations:
- Summation and Product: and .
- Functions: denotes a function mapping domain to codomain . The notation describes the specific mapping of an element.
- Equivalence Relations: or denote relations that satisfy reflexivity, symmetry, and transitivity.
The Importance of Syntactic Rigor
Consider the Epsilon-Delta definition of a limit: This dense symbolic string replaces a clumsy natural language explanation. It specifies the exact dependence of on and the order of operations. Without symbolic rigor, advanced mathematics would collapse under its own complexity.
Implementing Logic via Computation
While we focus on pure mathematics, the parallels to formal logic in computer science are profound. We can model logical operations to verify complex boolean expressions.
type Proposition = boolean;
const and = (p: Proposition, q: Proposition): Proposition => p && q;
const or = (p: Proposition, q: Proposition): Proposition => p || q;
const not = (p: Proposition): Proposition => !p;
const implies = (p: Proposition, q: Proposition): Proposition => !p || q;
const iff = (p: Proposition, q: Proposition): Proposition => p === q;
// Example: Verifying De Morgan's Law ¬(P ∧ Q) ≡ ¬P ∨ ¬Q
const verifyDeMorgan = () => {
const values = [true, false];
for (const p of values) {
for (const q of values) {
const lhs = not(and(p, q));
const rhs = or(not(p), not(q));
console.log(`P=${p}, Q=${q} | LHS=${lhs}, RHS=${rhs} | Match=${lhs === rhs}`);
}
}
};
This computational approach allows us to “calculate” truths in propositional logic, though it does not scale to the infinite domains required for predicate logic.