# Chains of equivalences

This document gives a short description of how Carnap presents the systems of "chains of equivalences" that allow transformations of sentences into equivalent sentences, e.g., in disjunctive or conjunctive normal form.

## Notation

The system uses the parser/syntax of *forall x: Calgary* and the *Open
Logic Text*.

The different admissible keyboard abbreviations for the different connectives are as follows:

Connective | Keyboard |
---|---|

→ | `->` , `=>` , `>` |

∧ | `/\` , `&` , `and` |

∨ | `\/` , `|` , `or` |

↔︎ | `<->` , `<=>` |

¬ | `-` , `~` , `not` |

⊥ | `!?` , `_|_` |

∀ | `A` , `@` |

∃ | `E` , `3` |

Proofs consist of a series of lines. Every line contains a formula
followed by a `:`

and then a rule abbreviation. The first line is
justified by `:PR`

. The available rules are all equivalences, and can
be applied to subformulas of a given formula. It is assumed that
every line follows from the immediately preceding line by one of the
equivalence rules below.

## Equivalences for TFL (propositional logic)

The equivalence proof checker is selected
using `.ZachPropEq`

.

The following exchange rules are allowed. They can be used within a propositional context Φ, and in both directions. In other words, any formula occurrence on the left of the table below can be replaced by the corresponding formula on the right, and vice versa.

Rule | Abbreviation | Premises | Conclusion |
---|---|---|---|

Double Negation | `DN` |
¬¬φ |
φ |

Conditional | `Cond` |
(φ→ψ) |
(¬φ∨ψ) |

(¬φ→ψ) |
(φ∨ψ) |
||

Biconditional Exchange | `Bicond` |
(φ↔︎ψ) |
((φ→ψ)∧(ψ→φ)) |

DeMorgan's Laws | `DeM` |
¬(φ∧ψ) |
(¬φ∨¬ψ) |

¬(φ∨ψ) |
(¬φ∧¬ψ) |
||

Commutativity | `Comm` |
(φ∧ψ) |
(ψ∧φ) |

(φ∨ψ) |
(ψ∨φ) |
||

Associativity | `Assoc` |
(φ∧(ψ∧χ)) |
((φ∧ψ)∧χ) |

(φ∨(ψ∨χ)) |
((φ∨ψ)∨χ) |
||

Distributivity | `Dist` |
(φ∨(ψ∧χ)) |
((φ∨ψ)∧(φ∨χ)) |

(φ∧(ψ∨χ)) |
((φ∧ψ)∨(φ∧χ)) |
||

((φ∧ψ)∨(φ∧χ)) |
(φ∧(ψ∨χ)) |
||

Idempotence | `Id` |
(φ∧φ) |
φ |

(φ∨φ) |
φ |
||

Absorption | `Abs` |
(φ∧(φ∨ψ)) |
φ |

(φ∨(φ∧ψ)) |
φ |
||

Simplification | `Simp` |
(φ∧(ψ∨¬ψ)) |
φ |

(φ∨(ψ∧¬ψ)) |
φ |
||

(φ∨(ψ∨¬ψ)) |
(ψ∨¬ψ) |
||

(φ∧(ψ∧¬ψ)) |
(ψ∧¬ψ) |

The rules for distributivity, absorption, and simplification allow for
implicit commutativity, so e.g., `Distr`

also allows replacing
(*ψ*∧*χ*) ∨ *φ* by (*ψ*∨*φ*) ∧ (*χ*∨*φ*), and `Simp`

allows replacing (¬*ψ*∨*ψ*) ∧ *φ* by
*φ*.

If the conclusion of the target entailment is left empty, and the
`tests`

option is set, the checker will accept any proof where the
last line meets the test. So for instance, to require students to
transform a sentence into conjunctive normal form, you would assign

```
```{.ProofChecker .ZachPropEq tests="CNF"}
Ex1 A \/ ~(B \/ C) :|-:
|A \/ ~(B \/ C) :PR
```
```

A proof playground is also supported.

```
```{.Playground .ZachPropEq}
```
```

The available tests are the same as for translation exercises, and can be combined. If combined, multiple tests have to be separated by spaces. Tests also work on playgrounds.

Name | Effect |
---|---|

`CNF` |
Requires conjunctive normal form |

`DNF` |
Requires disjunctive normal form |

`maxCon:N` |
Requires that the translation contain N or fewer connectives |

`maxNot:N` |
Requires that the translation contain N or fewer negations |

`maxAnd:N` |
Requires that the translation contain N or fewer conjunctions |

`maxIff:N` |
Requires that the translation contain N or fewer biconditionals |

`maxIf:N` |
Requires that the translation contain N or fewer conditionals |

`maxOr:N` |
Requires that the translation contain N or fewer disjunctions |

`maxFalse:N` |
Requires that the translation contain N or fewer falsity constants |

`maxAtom:N` |
Requires that the translation contain N or fewer atomic sentences |

## The FOL Systems

The system `.ZachFOLEq`

extends the rules of `.ZachPropEq`

by
equivalence rules for quantifiers, also applied in arbitrary contexts
Φ, and in either direction. Those are:

Rule | Abbreviation | Premises | Conclusion |
---|---|---|---|

Variable Renaming | `VR` |
∀x φ(x) |
∀y φ(y) |

∃x φ(x) |
∃y φ(y) |
||

Quantifier Exchange | `QX` |
∀x∀y φ(x,y) |
∀y∀x φ(y) |

∃x∃y φ(x,y) |
∃y∃x φ(x,y) |
||

Quantifier Negation | `QN` |
¬∀xφ(x) |
∃x¬φ(x) |

¬∃xφ(x) |
∀x¬φ(x) |
||

Quantifier Distribution | `QD` |
∀x(φ(x)∧ψ(x)) |
∀x φ(x) ∧ ∀x ψ(x) |

∃x(φ(x)∨ψ(x)) |
∃x φ(x) ∨ ∃x ψ(x) |
||

Quantifier Shift for ∀ | `QSA` |
∀x(φ(x)∧ψ) |
∀x φ(x) ∧ ψ |

∀x(φ(x)∨ψ) |
∀x φ(x) ∨ ψ |
||

∀x(φ(x)→ψ) |
∃x φ(x) → ψ |
||

∀x(ψ→φ(x)) |
ψ → ∀x φ(x) |
||

Quantifier Shifts for ∃ | `QSE` |
∃x(φ(x)∧ψ) |
∃x φ(x) ∧ ψ |

∃x(φ(x)∨ψ) |
∃x φ(x) ∨ ψ |
||

∃x(φ(x)→ψ) |
∀x φ(x) → ψ |
||

∃x(ψ→φ(x)) |
ψ → ∃x φ(x) |

Note that Carnap actually considers all formulas equal up to renaming
of bound variables. Thus, the `VR`

rules are provided just for
completeness (and will allow any number of renamings of bound
variables). Any variable renaming necessary to apply a quantifier
shift can be done implicitly without first invoking the `VR`

rule.

Testing of correctness can become quite slow, so it is recommended to
not do this on every button press and use `feedback="manual"`

instead.

The FOL system has an additional test, `PNF`

, that requires the final
line to be in prenex normal form.

```
```{.ProofChecker .ZachFOLEq options="resize" feedback="manual" tests="PNF"}
Ex2 ~(Ax P(x) <-> Ey Q(y)) :|-:
|~(Ax P(x) <-> Ey Q(y)) :PR
```
```