coqtype-theory

What exactly is a Set in Coq


I'm still puzzled what the sort Set means in Coq. When do I use Set and when do I use Type?

In Hott a Set is defined as a type, where identity proofs are unique. But I think in Coq it has a different interpretation.


Solution

  • Set means rather different things in Coq and HoTT.

    In Coq, every object has a type, including types themselves. Types of types are usually referred to as sorts, kinds or universes. In Coq, the (computationally relevant) universes are Set, and Type_i, where i ranges over natural numbers (0, 1, 2, 3, ...). We have the following inclusions:

    Set <= Type_0 <= Type_1 <= Type_2 <= ...
    

    These universes are typed as follows:

     Set : Type_i     for any i
    
    Type_i : Type_j  for any i < j
    

    Like in Hott, this stratification is needed to ensure logical consistency. As Antal pointed out, Set behaves mostly like the smallest Type, with one exception: it can be made impredicative when you invoke coqtop with the -impredicative-set option. Concretely, this means that forall X : Set, A is of type Set whenever A is. In contrast, forall X : Type_i, A is of type Type_(i + 1), even when A has type Type_i.

    The reason for this difference is that, due to logical paradoxes, only the lowest level of such a hierarchy can be made impredicative. You may then wonder then why Set is not made impredicative by default. This is because an impredicative Set is inconsistent with a strong form of the axiom of the excluded middle:

    forall P : Prop, {P} + {~ P}.
    

    What this axiom allows you to do is to write functions that can decide arbitrary propositions. Note that the {P} + {~ P} type lives in Set, and not Prop. The usual form of the excluded middle, forall P : Prop, P \/ ~ P, cannot be used in the same way, because things that live in Prop cannot be used in a computationally relevant way.