I'm referring to these concepts:
- Prop in Agda and SProp in Coq, a "sort of definitionally proof-irrelevant propositions", and their squash type (and relatedly, the usual Prop in Coq);
- mere propositions and propositional truncation in HoTT (see §3.7 of the book); and
- double negation.
These all clearly have some things in common, for example:
- axioms like LEM* and choice**,
- a modality (resp. squash, truncation, and double negation) which implies double negation (i.e.
Squash A → ¬¬ A
), and - propositional truncation and double negation are classically equivalent, and the HoTT book says they have the same universal property, although I'm not sure what that means (related?).
There also appear to be some observable differences, for example:
From comments and answers on my question on canonicity for irrelevant types:
SProp terms are propositionally truncated, which means that no model can distinguish terms of the same SProp type.
The funny thing with SProp is that it gives a generalization of the result that consistent negative axioms can be postulated without breaking canonicity.
HoTT (with the UA as an axiom) also satisfies weak canonicity, in the sense that every term is propositionally equal to a canonical term.
Substructural (e.g. paraconsistent and/or paracomplete) systems may have multiple forms of falsity and negation (for example 'implies bottom' or 'implies zero' in linear logic, or 'top excludes' from basic logic, and I don't know how or if these could be related. (Perhaps zero and bottom relate to proof-relevance for falsity? Zero and top have "kirby-reduction" and "katamari-expansion" eta rules which eat everything.)
How are these different truncation-like modalities and their respective propositions related? Additionally,
- How many constructively (or even substructurally) inequivalent truncation-like modalities are there?
- Do axioms for one imply axioms for the other? Could you even have different (or even mutually inconsistent) axioms for each?
* Double negation does not entirely get LEM as a theorem. You get ∀ {A : Set} → ¬¬ (¬ A + A)
but not ¬¬ ∀ {A : Set} → (¬ A A)
without double negation shift.
** e.g. (∀ (x : A) → Squash (P x)) → Squash (∀ (x : A) → P x)