[Agda] Trust me regarding Dan Licata's trick
Martin Escardo
m.escardo at cs.bham.ac.uk
Mon Jun 10 11:36:22 CEST 2013
On 10/06/13 10:06, Nils Anders Danielsson wrote:
> On 2013-06-07 10:42, Martin Escardo wrote:
>> Anyway, if trustMe does work as a postulate as claimed earlier, why is
>> it needed/useful at all?
>
> Dan Licata gave an explanation earlier in this thread.
Which I didn't fully understand, but never mind.
Now I am convinced that trustMe can't do what I want, and that moreover
it doesn't make sense to have all elements of the hpropositional
truncation to be definitionally equal, for the following reason:
Using Dan's trick without trustMe but instead with a postulate
postulate truncation-is-hprop : {X : Set} -> hprop || X ||
we get hpropositional truncation so that the non-dependent elimination
rule holds definitionally:
truncation-rec : {X P : Set} -> hprop P -> (X -> P) -> (|| X || -> P)
truncation-rec _ f | x | = f x
(The dependent elimination rule truncation-ind also holds
definitionally, but we don't need it.)
Using this, we can prove
hset-funext : {X : Set} {Y : X -> Set} -> ((x : X) -> hset(Y x)) ->
(f g : (x : X) -> Y x) -> (∀(x : X) -> f x == g x) -> f == g
where == is propositional equality and hset means that any two proofs of
equality are equal (i.e. UIP).
http://www.cs.bham.ac.uk/~mhe/truncation-and-extensionality/hsetfunext.html
If, moreover, we had that |x|=|x'| held definitionally in ||X|| for all
x,x':X, with the above proof we would get that any two hset-valued,
pointwise equal functions would be definitionally equal, which is
non-sense. Additionally, trustMe would break, and presumably SegFault,
if we used it to replace the postulate, precisely at the point when we
tried to use a proof of equality of two functions obtained from
hset-funext.
So don't trustMe regarding Dan's trick.
In any case, the above says that implementing hpropositional truncation
in intensional type theory so that canonicity is not lost is at least as
hard as implementing the axiom of function extensionality for
hset-valued functions. Something naive such as trustMe won't work.
Best,
Martin
More information about the Agda
mailing list