Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Parametricity Axiom

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Parametricity Axiom


Chronological Thread 
  • From: Maximilian Wuttke <mwuttke97 AT posteo.de>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Parametricity Axiom
  • Date: Fri, 19 Feb 2021 00:18:29 +0100
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=mwuttke97 AT posteo.de; spf=Pass smtp.mailfrom=mwuttke97 AT posteo.de; spf=None smtp.helo=postmaster AT mout01.posteo.de
  • Ironport-phdr: 9a23:6CZoUx0DODp0H31EsmDT+DRfVm0co7zxezQtwd8ZseIXLPad9pjvdHbS+e9qxAeQG9mCurQb16GJ6OjJYi8p2d65qncMcZhBBVcuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6JvjvGo7Vks+7y/2+94fcbglVgDexe7F/IRq5oQjTuMQdnJdvJLs2xhbVuHVDZv5YxXlvJVKdnhb84tm/8Zt++ClOuPwv6tBNX7zic6s3UbJXAjImM3so5MLwrhnMURGP5noHXWoIlBdDHhXI4wv7Xpf1tSv6q/Z91SyHNsD4Ubw4RTKv5LptRRT1iikIKiQ5/XnKhMJugqJVoBGvqRJxzIHbYo6aKPVwc7jBfd4ZX2dNQtpdWiJDD466coABD/ABPeFdr4TloFUBtxS/BQipBOPuzj9Ih2X53asn2OshDAHGwBAgH9EQv3/Jq9j1MakTUf2pzKnUzjXMcfdb1DXm5YjQdRAhuu2MUqx3ccbL1EYgCRrIg1ONooPqIz2bzP4Cs3SH7+V+T+KvjXYqpQ9trjahxskhiY3EiI0bxFza+yt03ok7KN26RUJlf9OpHodduiWZOoZ4Tc0uX31ltDg0x7AJuJO1cigExpo6yhPZdveJcJCI7wr+WOuSITp0nnNodbClixu88EWs0OzxW8ms3FtJqidJiMTAu38M2hDJ9MSLVOdx8l281TuBywze7PxPL1oumqrBMZEhx6Y9lpoNvkTHGS/7gED2jKiLdkU45uSk9v7rYq3hpp+HK497lAb+Pr4zlcOhGeg4Mw4OUHaH+emkybHu/k30TK9Lg/A0iKXUvpHXKd4aq6O5GwNV15ws6xe7DzeoytQYmnwHIUpAeBOJkojpJ03OIPPmAvq7gVmhiy9rx/fdPr39HJrNKWLPn6r/crpl8U5T1BIzzcxD55JTErwOPPXzWlbouNPECh85Lhe7zv38CNR904MeQXiADrWYMKPUq1+I5/ggL/OCZI8P637BLK0u4Oerhnskk3cce7Oo1N0ZciOWBPNjdmCQcXvpg9MAGGFCgRciUO/nwAmHTiNPe3W/Dv0U/jYgFI+hS4vOENP+yIed1Tu2S8UFLltNDUqBRC+xJte0HswUYSfXGfdP1zkNVLyvUYgkjEj8rAjh17dgaObZqHRB6MDTkeNt7uiWrikcsDx5C8PEgzOISHxoxjpOXzgtwK1450BwmA/ajfpIxsdAHNkW3MtnFx8gPMeFnfR9EMz/XUTNc4XRRQ==

Hi Dominique,

On 18/02/2021 23:48, Dominique Larchey-Wendling wrote:
> From your statement, only g = f (fun x => x) can satisfy your property
> Cannot you prove that this definition of g is enough ?
>

Thanks for your answer. Unfortunately, this definition doesn't work.
Let's consider the easy case ϕ1=ϕ2=0 again (where I simplified `Vector.t
X 0` to unit):

> Goal
> forall (f : forall {X}, (unit -> X) -> (unit -> X)),
> exists g : unit -> unit,
> forall (X : Type) (i : unit -> X) (ys : unit),
> f i ys = i (g ys).
> Proof.
> intros f.
> exists (f _ (fun x => x)); intros X i []; cbn.
> (* Goal: f X i tt = i (f unit (fun x : unit => x) tt) *)
> Undo.
> exists (fun x => x); intros X i []; cbn.
> (* Goal: f X i tt = i tt <This one> *)
> Abort.

Basically, since f is parametric in X, all f can do is applying the
first argument to `tt`. That's why I've chosen `g := fun x : unit => x`.
I think <This one> goal holds but I don't think it can be proved.

In the general case, f could select/permute/insert/delete/etc. elements
from the second argument `ys : Vector.t nat ϕ2` and apply this to the
first argument of type `(Vector.t nat ϕ1) -> X`.

-- Maximilian



Archive powered by MHonArc 2.6.19+.

Top of Page