In here: http://www.cse.chalmers.se/~coquand/equality.pdf on slide 23 they define a very interesting type, iscontr A
. I think it translates to:
record iscontr {A : Set} : Set where
constructor _exists_unique
field
a : A
singleton : (x : A) -> a == x
I don't see the subtle point they are making. They claim that at first it may seem that this is just a proof of A
being inhabited with multiple, but (path) connected values - and this is exactly what I see here; but in fact, they claim, it is a proof of having a single inhabitant in type A
.
Given that iscontr
is introduced before even J
is introduced (and is actually used to give an alternative definition of the induction axiom, J
), this fact must be stemming from things other than induction.
Ok, at first I thought that to inhabit this type means to produce a function that can map any value of type A
- including those that are not canonical (eg introduced by axioms) (remember, we can't do the usual pattern matching here, because we don't have the induction axiom yet). This would mean that somehow no new values can be added to A
, even using axioms. This fact is a clear indication to me that we are pretty much bound to introduce an inhabitant of type iscontr
through an axiom (which is what they do for type (x,α) on some following slide). But I don't see how this precludes existence of multiple values of type A
, enumerated in the singleton
function to produce a a == x
for each.
(Also, I won't understand examples from toposes, groupoids, etc; so would be great to see an explanation through plain reasoning based on axioms introduced prior to slide 23)
isContr A
holds, bothA
and⊤
are equivalent. So yes, in this senseA
has exactly one element. The point they are making is indeed about contractibility vs connectedness. If you want, take a look at 3.11.2 in the HoTT book. - Vitus