Interface:Principia Mathematica propositional logic theorems

Well-formed formulas
We first introduce the kind of well-formed formulas and a few variables for this kind.  kind (wff) var (wff p q r s)  Some authors just use the term formula instead of wff, so we define  to be an alias of   kindbind (wff formula) 

Logical connectives
There are five standard logical connectives in the classical propositional calculus, negation,  term (wff (¬ wff))  implication,  term (wff (→ wff wff))  disjunction,  term (wff (∨ wff wff))  conjunction,  term (wff (∧ wff wff))  and, finally, the biconditional,  term (wff (↔ wff wff))  In addition, one can also consider the constant formulas (or nullary connectives) "the true",  term (wff (⊤))  and "the false",  term (wff (⊥)) </jh>

Simple statements
Here are the statements which do not require any hypotheses.

Constant statements
The simplest statements are the "true" and the "not false" statement:  stmt (True  (⊤)) stmt (NotFalse  (¬ (⊥))) </jh>

Negation and implication
Double negation:  stmt (DoubleNegation  (p ↔ (¬ (¬ p)))) </jh> Implication is reflexive. Sometimes, this is called "Identity" or "Tautology".  stmt (ImplicationReflexivity  (p → p)) </jh> Introduction of an antecedent. Whitehead and Russell call this "Simplification" :  stmt (AntecedentIntroduction  (p → (q → p))) </jh> Syllogism can be stated in several ways, but this is probably the most familiar:  stmt (ImplicationTransitivity  (((p → q) ∧ (q → r)) → (p → r))) </jh> Syllogism can also applied to formulas with a common antecedent. Other formulas with a common antecedent can be built up using rules such as,  , etc, but we provide this one for convenience:  stmt (SyllogismInConsequent  ((p → (q → r)) → ((p → (r → s)) → (p → (q → s))))) </jh> If the consequent of an implication is an implication itself, its antecedent can be distributed over antecedent and consequent of the consequent, and vice versa.  stmt (AntecedentDistribution  ((p → (q → r)) ↔ ((p → q) → (p → r)))) </jh> There are three transposition statements:  stmt (Transposition  ((p → q) ↔ ((¬ q) → (¬ p)))) stmt (TranspositionWithNegatedAntecedent  (((¬ p) → q) ↔ ((¬ q) → p))) stmt (TranspositionWithNegatedConsequent  ((p → (¬ q)) ↔ (q → (¬ p)))) </jh>

Disjunction and conjunction
Idempotence:  stmt (DisjunctionIdempotence  (p ↔ (p ∨ p))) stmt (ConjunctionIdempotence  (p ↔ (p ∧ p))) </jh>

Associativity:  stmt (DisjunctionAssociativity  (((p ∨ q) ∨ r) ↔ (p ∨ (q ∨ r)))) stmt (ConjunctionAssociativity  (((p ∧ q) ∧ r) ↔ (p ∧ (q ∧ r)))) </jh>

Commutativity:  stmt (DisjunctionCommutativity  ((p ∨ q) ↔ (q ∨ p))) stmt (ConjunctionCommutativity  ((p ∧ q) ↔ (q ∧ p))) </jh>

Distributivity:  stmt (DisjunctionLeftDistribution  ((p ∨ (q ∧ r)) ↔ ((p ∨ q) ∧ (p ∨ r)))) stmt (DisjunctionRightDistribution  (((p ∧ q) ∨ r) ↔ ((p ∨ r) ∧ (q ∨ r)))) stmt (ConjunctionLeftDistribution  ((p ∧ (q ∨ r)) ↔ ((p ∧ q) ∨ (p ∧ r)))) stmt (ConjunctionRightDistribution  (((p ∨ q) ∧ r) ↔ ((p ∧ r) ∨ (q ∧ r)))) </jh>

De Morgan's laws
Since De Morgan's laws have many forms, we use the suffix  to indicate the form. A law with suffix  will have the form , where   is   or   if   is   or  , respectively. is  or   if   is   or , respectively. Likewise for, except that   is used instead of.  stmt (DeMorganPDP  ((¬ (p ∨ q)) ↔ ((¬ p) ∧ (¬ q)))) stmt (DeMorganPDN  ((¬ (p ∨ (¬ q))) ↔ ((¬ p) ∧ q))) stmt (DeMorganNDP  ((¬ ((¬ p) ∨ q)) ↔ (p ∧ (¬ q)))) stmt (DeMorganNDN  ((¬ ((¬ p) ∨ (¬ q))) ↔ (p ∧ q))) stmt (DeMorganPCP  ((¬ (p ∧ q)) ↔ ((¬ p) ∨ (¬ q)))) stmt (DeMorganPCN  ((¬ (p ∧ (¬ q))) ↔ ((¬ p) ∨ q))) stmt (DeMorganNCP  ((¬ ((¬ p) ∧ q)) ↔ (p ∨ (¬ q)))) stmt (DeMorganNCN  ((¬ ((¬ p) ∧ (¬ q))) ↔ (p ∨ q))) </jh>

Other statements containing negation, implication, disjunction and conjunction
Although there is no associativity law for implication, we have the following importation/exportation principle due to Guiseppe Peano:  stmt (Transportation  ((p → (q → r)) ↔ ((p ∧ q) → r))) </jh> Two famous implication elimination principles, Modus ponens and modus tollens:  stmt (ModusPonens  ((p ∧ (p → q)) → q)) stmt (ModusTollens  (((¬ q) ∧ (p → q)) → (¬ p))) </jh> Introduction principle for disjunction: <jh> stmt (DisjunctionLeftIntroduction  (p → (q ∨ p))) stmt (DisjunctionRightIntroduction  (p → (p ∨ q))) </jh> Introduction and elimination principles for conjunction: <jh> stmt (ConjunctionLeftIntroduction  (p → (q → (q ∧ p)))) stmt (ConjunctionRightIntroduction  (p → (q → (p ∧ q)))) stmt (ConjunctionLeftElimination  ((p ∧ q) → q)) stmt (ConjunctionRightElimination  ((p ∧ q) → p)) </jh> Case by case elimination: <jh> stmt (CaseElimination  (((p → q) ∧ ((¬ p) → q)) → q)) </jh> Composition for disjunction and conjunction: <jh> stmt (DisjunctionComposition  (((p → r) ∧ (q → r)) ↔ ((p ∨ q) → r))) stmt (ConjunctionComposition  (((p → q) ∧ (p → r)) ↔ (p → (q ∧ r)))) </jh> Summation for disjunction. We use the suffixes,  ,   and   to indicate if the summands were added to the left or the right of antecedent or consequent, respectively. <jh> stmt (DisjunctionSummationLL  ((p → q) → ((r ∨ p) → (r ∨ q)))) stmt (DisjunctionSummationLR  ((p → q) → ((r ∨ p) → (q ∨ r)))) stmt (DisjunctionSummationRL  ((p → q) → ((p ∨ r) → (r ∨ q)))) stmt (DisjunctionSummationRR  ((p → q) → ((p ∨ r) → (q ∨ r)))) stmt (DisjunctionSummation  (((p → q) ∧ (r → s)) → ((p ∨ r) → (q ∨ s)))) </jh> Multiplication for conjunction, with the same suffixes as above. <jh> stmt (ConjunctionMultiplicationLL  ((p → q) → ((r ∧ p) → (r ∧ q)))) stmt (ConjunctionMultiplicationLR  ((p → q) → ((r ∧ p) → (q ∧ r)))) stmt (ConjunctionMultiplicationRL  ((p → q) → ((p ∧ r) → (r ∧ q)))) stmt (ConjunctionMultiplicationRR  ((p → q) → ((p ∧ r) → (q ∧ r)))) stmt (ConjunctionMultiplication  (((p → q) ∧ (r → s)) → ((p ∧ r) → (q ∧ s)))) </jh> Adding a common antecedent to an implication, or adding a common consequent and reversing the direction of the implication: <jh> stmt (CommonAntecedentAddition  ((q → r) → ((p → q) → (p → r)))) stmt (CommonConsequentAddition  ((p → q) → ((q → r) → (p → r)))) </jh>

Equivalence relation
The biconditional simply creates an equivalence relation among well-formed formulas: <jh> stmt (BiconditionalReflexivity  (p ↔ p)) stmt (BiconditionalSymmetry  ((p ↔ q) ↔ (q ↔ p))) stmt (BiconditionalTransitivity  (((p ↔ q) ∧ (q ↔ r)) → (p ↔ r))) </jh> This equivalence relation creates two equivalence classes, the true and the false formulas: <jh> stmt (Tautology  ((p ∨ (¬ p)) ↔ (⊤))) stmt (Contradiction  ((p ∧ (¬ p)) ↔ (⊥))) </jh> The left hand side of Tautology is precisely the tertium non datur statement ensuring the existence of at most two truth-values: <jh> stmt (TertiumNonDatur  (p ∨ (¬ p))) </jh>

Weakenings
A biconditional makes a strong statement. Often, we only need a weaker statement. For introductions, see the section on truth function interdependencies.

The naming convention here is that when we think of  as consisting of two implications, we call   the forward one and   the reverse one. <jh> stmt (BiconditionalForwardElimination  ((p ↔ q) → (q → p))) stmt (BiconditionalReverseElimination  ((p ↔ q) → (p → q))) </jh>

When we think of a biconditional as two disjunctions, an intuitive naming convention is more elusive, but we currently call  the left one and   the right one. <jh> stmt (BiconditionalDisjunctionLeftElimination  ((p ↔ q) → (p ∨ (¬ q)))) stmt (BiconditionalDisjunctionRightElimination  ((p ↔ q) → ((¬ p) ∨ q))) </jh>

Truth functions
The logical connectives are functions on the equivalence classes of true and false formulas. That is, if $$p_1,\ldots,p_n$$ and $$q_1,\ldots,q_n$$ are formulas such that $$p_i$$ and $$q_i$$ are in the same equivalence class for $$i=1,\ldots,n$$, then an $$n$$-ary logical connective will send both groups of formulas to the same equivalence class. We express this for our truth functions: <jh> stmt (NegationFunction  ((p ↔ q) ↔ ((¬ p) ↔ (¬ q)))) stmt (ImplicationFunction  (((p ↔ q) ∧ (r ↔ s)) → ((p → r) ↔ (q → s)))) stmt (DisjunctionFunction  (((p ↔ q) ∧ (r ↔ s)) → ((p ∨ r) ↔ (q ∨ s)))) stmt (ConjunctionFunction  (((p ↔ q) ∧ (r ↔ s)) → ((p ∧ r) ↔ (q ∧ s)))) stmt (BiconditionalFunction  (((p ↔ q) ∧ (r ↔ s)) → ((p ↔ r) ↔ (q ↔ s)))) </jh> Note that only negation has  as its leading connective because it is the only truth function  which is injective

Truth function interdependencies
The truth functions are not always independent of each other. We have already seen that in De Morgan's laws. Here are the remaining important interdependencies: Biconditional as bidirectional implication: <jh> stmt (BiconditionalImplication  ((p ↔ q) ↔ ((p → q) ∧ (q → p)))) </jh> Biconditional as disjunction of the two equivalence classes: <jh> stmt (BiconditionalDisjunction  ((p ↔ q) ↔ ((p ∧ q) ∨ ((¬ p) ∧ (¬ q))))) </jh> Biconditional as conjunction: <jh> stmt (BiconditionalConjunction  ((p ↔ q) ↔ (((¬ p) ∨ q) ∧ (p ∨ (¬ q))))) </jh> Implication as disjunction: <jh> stmt (ImplicationDisjunction  ((p → q) ↔ ((¬ p) ∨ q))) </jh> Disjunction as implication: <jh> stmt (DisjunctionImplication  ((p ∨ q) ↔ ((¬ p) → q))) </jh> Negation as implication: <jh> stmt (NegationImplication  ((¬ p) ↔ (p → (⊥)))) </jh>

Transposition
Transposition applies for the biconditional as well as for the implication, although commutativity means that some of the theorems can look different while still covering the same territory. The  theorem covers the case in which both or neither side is negated, and the following covers the case in which one side is negated:

<jh> stmt (BiconditionalTranspositionWithNegatedRight  ((p ↔ (¬ q)) ↔ (q ↔ (¬ p)))) </jh>

Antecedent distribution
Here is a version of  with one of the implications replaced by a biconditional. <jh> stmt (ImplicationDistributionOverBiconditional  ((p → (q ↔ r)) ↔ ((p → q) ↔ (p → r)))) </jh>

Biconditional and conjunction
A true conjunct does not affect the truth of a proposition. <jh> stmt (BiconditionalConjunct  (q → (p ↔ (p ∧ q)))) </jh>

Two true propositions are equivalent. <jh> stmt (TruthBiconditional  ((p ∧ q) → (p ↔ q))) </jh>

Rules
Each propositional calculus needs at least one rule of detachment (modus ponens appears to be the most common). However, it will be convenient to have certain toolbox of rules implementing often used statements.

Negation and implication: <jh> stmt (introduceDoubleNegation (p) (¬ (¬ p))) stmt (eliminateDoubleNegation ((¬ (¬ p))) p) stmt (introduceAntecedent  (p) (q → p)) stmt (applySyllogism ((p → q) (q → r)) (p → r)) stmt (applySyllogismInConsequent ((p → (q → r)) (p → (r → s))) (p → (q → s))) stmt (distributeAntecedent ((p → (q → r))) ((p → q) → (p → r))) stmt (collectAntecedent (((p → q) → (p → r))) (p → (q → r))) stmt (eliminateTransposition (((¬ q) → (¬ p))) (p → q)) stmt (introduceTransposition ((p → q)) ((¬ q) → (¬ p))) stmt (transposeWithNegatedAntecedent (((¬ p) → q)) ((¬ q) → p)) stmt (transposeWithNegatedConsequent ((p → (¬ q))) (q → (¬ p))) </jh> Disjunction and conjunction: <jh> stmt (cloneAsDisjunction (p) (p ∨ p)) stmt (conflateDisjunction ((p ∨ p)) p) stmt (cloneAsConjunction  (p) (p ∧ p)) stmt (conflateConjunction ((p ∧ p)) p) stmt (groupDisjunctionLeft  ((p ∨ (q ∨ r))) ((p ∨ q) ∨ r)) stmt (groupDisjunctionRight (((p ∨ q) ∨ r)) (p ∨ (q ∨ r))) stmt (groupConjunctionLeft ((p ∧ (q ∧ r))) ((p ∧ q) ∧ r)) stmt (groupConjunctionRight (((p ∧ q) ∧ r)) (p ∧ (q ∧ r))) stmt (swapDisjunction ((p ∨ q)) (q ∨ p)) stmt (swapConjunction ((p ∧ q)) (q ∧ p)) stmt (distributeLeftDisjunction ((p ∨ (q ∧ r))) ((p ∨ q) ∧ (p ∨ r))) stmt (collectLeftDisjunction (((p ∨ q) ∧ (p ∨ r))) (p ∨ (q ∧ r))) stmt (distributeRightDisjunction (((p ∧ q) ∨ r)) ((p ∨ r) ∧ (q ∨ r))) stmt (collectRightDisjunction (((p ∨ r) ∧ (q ∨ r))) ((p ∧ q) ∨ r)) stmt (distributeLeftConjunction ((p ∧ (q ∨ r))) ((p ∧ q) ∨ (p ∧ r))) stmt (collectLeftConjunction (((p ∧ q) ∨ (p ∧ r))) (p ∧ (q ∨ r))) stmt (distributeRightConjunction (((p ∨ q) ∧ r)) ((p ∧ r) ∨ (q ∧ r))) stmt (collectRightConjunction (((p ∧ r) ∨ (q ∧ r))) ((p ∨ q) ∧ r)) </jh> De Morgan's laws: <jh> stmt (distributeNegationPDP ((¬ (p ∨ q))) ((¬ p) ∧ (¬ q))) stmt (distributeNegationPDN ((¬ (p ∨ (¬ q)))) ((¬ p) ∧ q)) stmt (distributeNegationNDP ((¬ ((¬ p) ∨ q))) (p ∧ (¬ q))) stmt (distributeNegationNDN ((¬ ((¬ p) ∨ (¬ q)))) (p ∧ q)) stmt (distributeNegationPCP ((¬ (p ∧ q))) ((¬ p) ∨ (¬ q))) stmt (distributeNegationPCN ((¬ (p ∧ (¬ q)))) ((¬ p) ∨ q)) stmt (distributeNegationNCP ((¬ ((¬ p) ∧ q))) (p ∨ (¬ q))) stmt (distributeNegationNCN ((¬ ((¬ p) ∧ (¬ q)))) (p ∨ q)) stmt (collectNegationPDP ((p ∨ q)) (¬ ((¬ p) ∧ (¬ q)))) stmt (collectNegationPDN ((p ∨ (¬ q))) (¬ ((¬ p) ∧ q))) stmt (collectNegationNDP (((¬ p) ∨ q)) (¬ (p ∧ (¬ q)))) stmt (collectNegationNDN (((¬ p) ∨ (¬ q))) (¬ (p ∧ q))) stmt (collectNegationPCP ((p ∧ q)) (¬ ((¬ p) ∨ (¬ q)))) stmt (collectNegationPCN ((p ∧ (¬ q))) (¬ ((¬ p) ∨ q))) stmt (collectNegationNCP (((¬ p) ∧ q)) (¬ (p ∨ (¬ q)))) stmt (collectNegationNCN (((¬ p) ∧ (¬ q))) (¬ (p ∨ q))) </jh> Other rules containing negation, implication, disjunction and conjunction: <jh> stmt (import ((p → (q → r))) ((p ∧ q) → r)) stmt (export (((p ∧ q) → r)) (p → (q → r))) stmt (applyModusPonens (p (p → q)) q) stmt (applyModusTollens  ((¬ q) (p → q)) (¬ p)) stmt (introduceLeftDisjunction (p) (q ∨ p)) stmt (introduceRightDisjunction (p) (p ∨ q)) stmt (introduceConjunction (p q) (p ∧ q)) stmt (eliminateLeftConjunct ((p ∧ q)) q) stmt (eliminateRightConjunct  ((p ∧ q)) p) stmt (eliminateCases  ((p → q) ((¬ p) → q)) q) stmt (composeDisjunction  ((p → r) (q → r)) ((p ∨ q) → r)) stmt (extractLeftDisjunction (((p ∨ q) → r)) (p → r)) stmt (extractRightDisjunction (((p ∨ q) → r)) (q → r)) stmt (composeConjunction ((p → q) (p → r)) (p → (q ∧ r))) stmt (extractLeftConjunction ((p → (q ∧ r))) (p → q)) stmt (extractRightConjunction ((p → (q ∧ r))) (p → r)) stmt (disjoinLL ((p → q)) ((r ∨ p) → (r ∨ q))) stmt (disjoinLR ((p → q)) ((r ∨ p) → (q ∨ r))) stmt (disjoinRL ((p → q)) ((p ∨ r) → (r ∨ q))) stmt (disjoinRR ((p → q)) ((p ∨ r) → (q ∨ r))) stmt (disjoin ((p → q) (r → s)) ((p ∨ r) → (q ∨ s))) stmt (conjoinLL ((p → q)) ((r ∧ p) → (r ∧ q))) stmt (conjoinLR ((p → q)) ((r ∧ p) → (q ∧ r))) stmt (conjoinRL ((p → q)) ((p ∧ r) → (r ∧ q))) stmt (conjoinRR ((p → q)) ((p ∧ r) → (q ∧ r))) stmt (conjoin ((p → q) (r → s)) ((p ∧ r) → (q ∧ s))) stmt (addCommonAntecedent ((q → r)) ((p → q) → (p → r))) stmt (addCommonConsequent ((p → q)) ((q → r) → (p → r))) </jh> Biconditional: <jh> stmt (swapBiconditional ((p ↔ q)) (q ↔ p)) stmt (applyBiconditionalTransitivity ((p ↔ q) (q ↔ r)) (p ↔ r)) stmt (eliminateBiconditionalForward ((p ↔ q)) (q → p)) stmt (eliminateBiconditionalReverse ((p ↔ q)) (p → q)) stmt (eliminateLeftBiconditionalDisjunction ((p ↔ q)) (p ∨ (¬ q))) stmt (eliminateRightBiconditionalDisjunction ((p ↔ q)) ((¬ p) ∨ q)) stmt (addNegation ((p ↔ q)) ((¬ p) ↔ (¬ q))) stmt (removeNegation (((¬ p) ↔ (¬ q))) (p ↔ q)) stmt (buildImplication ((p ↔ q) (r ↔ s)) ((p → r) ↔ (q → s))) stmt (buildDisjunction ((p ↔ q) (r ↔ s)) ((p ∨ r) ↔ (q ∨ s))) stmt (buildConjunction ((p ↔ q) (r ↔ s)) ((p ∧ r) ↔ (q ∧ s))) stmt (buildBiconditional ((p ↔ q) (r ↔ s)) ((p ↔ r) ↔ (q ↔ s))) stmt (convertFromBiconditionalToImplications ((p ↔ q)) ((p → q) ∧ (q → p))) stmt (convertToBiconditionalFromImplications (((p → q) ∧ (q → p))) (p ↔ q)) stmt (introduceBiconditionalFromImplications ((p → q) (q → p)) (p ↔ q)) stmt (convertFromBiconditionalToDisjunction ((p ↔ q)) ((p ∧ q) ∨ ((¬ p) ∧ (¬ q)))) stmt (convertToBiconditionalFromDisjunction (((p ∧ q) ∨ ((¬ p) ∧ (¬ q)))) (p ↔ q)) stmt (convertFromBiconditionalToConjunction ((p ↔ q)) (((¬ p) ∨ q) ∧ (p ∨ (¬ q)))) stmt (convertToBiconditionalFromConjunction ((((¬ p) ∨ q) ∧ (p ∨ (¬ q)))) (p ↔ q)) stmt (introduceBiconditionalFromDisjunctions (((¬ p) ∨ q) (p ∨ (¬ q))) (p ↔ q)) stmt (convertFromImplicationToDisjunction ((p → q)) ((¬ p) ∨ q)) stmt (convertToImplicationFromDisjunction (((¬ p) ∨ q)) (p → q)) stmt (convertFromDisjunctionToImplication ((p ∨ q)) ((¬ p) → q)) stmt (convertToDisjunctionFromImplication (((¬ p) → q)) (p ∨ q)) stmt (convertFromNegationToImplication ((¬ p)) (p → (⊥))) stmt (convertToNegationFromImplication ((p → (⊥))) (¬ p)) stmt (transposeBiconditionalWithNegatedRight ((p ↔ (¬ q))) (q ↔ (¬ p))) stmt (distributeImplicationOverBiconditional ((p → (q ↔ r))) ((p → q) ↔ (p → r))) </jh>