Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] help with automating derived UIP_refl proofs

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] help with automating derived UIP_refl proofs


Chronological Thread 
  • From: Jason Gross <jasongross9 AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] help with automating derived UIP_refl proofs
  • Date: Thu, 01 Sep 2016 06:24:15 +0000
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=jasongross9 AT gmail.com; spf=Pass smtp.mailfrom=jasongross9 AT gmail.com; spf=None smtp.helo=postmaster AT mail-qt0-f171.google.com
  • Ironport-phdr: 9a23:m2OtzhzxfAopov7XCy+O+j09IxM/srCxBDY+r6Qd0u0UIJqq85mqBkHD//Il1AaPBtSCra8cwLOO7eigATVGusnR9ihaMdRlbFwst4Y/p0QYGsmLCEn2frbBThcRO4B8bmJj5GyxKkNPGczzNBX4q3y26iMOSF2kbVImbre9JomHhMOukuu25pf7YgNShTP7b6khAg+xqFDzv9IRh8NNMKEq0VOdoHJTfOJZ32RzPgO7kBP158P295lmpXcD88k9/tJNBP2pN58zSqZVWWwr

I'm no longer convinced this can be done, but I bet asking on hott-cafe, or looking at the file PathGroupoid in the HoTT library, could get you ask answer (the HoTT name for [f_equal] is [ap])

Coq can do more with x=y because the induction principle is secretly about { y | x = y }, not about x=y. 


On Wed, Aug 31, 2016, 11:07 PM Jason Gross <jasongross9 AT gmail.com> wrote:

In UIP_iso_pointed you should be able to do [apply (f_equal BtoA) in H], and then prove that if you nest two [f_equal], you could have a single one that is on a function composition, and then prove that if you do [f_equal] with a function that is equal to the identity on the end-points of your path, you could just as well not have had the [f_equal] at all.


On Wed, Aug 31, 2016, 9:08 PM Jonathan Leivent <jonikelee AT gmail.com> wrote:


On 08/31/2016 11:41 PM, Jonathan Leivent wrote:
>
> On 08/31/2016 11:18 PM, Jason Gross wrote:
>> Actually, I think it's possible to do better; you should only need
>> AtoB_BtoA specialized to the point you care about.  This should be a
>> relatively simple transformation to make, and, I think, should be
>> powerful
>> enough to let you handle recursive types
>
> I think you are right that AtoB_BtoA only needs to be at a point. But,
> if AtoB is always a ctor and BtoA is always a proj, then I'm not sure
> that this specialization helps much, if at all.
>
> -- Jonathan
>

Oops - it is needed. I just tried using UIP_iso_pointed to prove UIP on
nat, and got:

|- forall b : nat, S (pred b) = b

which is obviously not true at b=0.  OK - how to make it only need
AtoB_BtoA at a point?  Obviously, f_equal_cancel needs to be reworked,
but the obvious way "(e : x=x)" doesn't work.  It always seems peculiar
to me that in some circumstances in Coq, one can do more to x=y than to
x=x - as in this case.

-- Jonathan




Archive powered by MHonArc 2.6.18.

Top of Page