Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Dependent match on two vectors

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Dependent match on two vectors


Chronological Thread 
  • From: Vincent Siles <vincent.siles AT ens-lyon.org>
  • To: Coq-Club Club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Dependent match on two vectors
  • Date: Wed, 10 Oct 2018 16:19:55 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=vincent.siles AT ens-lyon.org; spf=None smtp.mailfrom=SRS0=IJ69=MW=ens-lyon.org=vincent.siles AT bounce.ens-lyon.org; spf=Pass smtp.helo=postmaster AT sonata.ens-lyon.org
  • Ironport-phdr: 9a23:NXimchzSX+rRkUzXCy+O+j09IxM/srCxBDY+r6Qd2+0TIJqq85mqBkHD//Il1AaPAd2Eraocw8Pt8InYEVQa5piAtH1QOLdtbDQizfssogo7HcSeAlf6JvO5JwYzHcBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBBr/KRB1JuPoEYLOksi7ze+/94HRbglSmDaxfa55IQmrownWqsQYm5ZpJLwryhvOrHtIeuBWyn1tKFmOgRvy5dq+8YB6/ShItP0v68BPUaPhf6QlVrNYFygpM3o05MLwqxbOSxaE62YGXWUXlhpIBBXF7A3/U5zsvCb2qvZx1S+HNsDtU7s6RSqt4LtqSB/wiScIKTg58H3MisdtiK5XuQ+tqwBjz4LRZoyeKfhwcb7Hfd4CSmVBUMReWSxPDI2/coUBEfYOMP1CoIXhvVYDtweyCRWuCe7p1zRGhmX23ao/0+k5Hg7G3QogEM4Qv3TSsNX+KbocUeGxzKbW1jXIcvRb2Sn86IjObh8uv/eMXa5qfcrKyEkvEx3Kjk6LpIP7OTOVzf0Bs2yb7upnU+KjkWknqxt+ojW2wMonl4rHhpoNx1zZ+ih13Jw5KN+6RUJhfNKpEZpduzuHO4Z4Qc4uW39ktDo+x7EcupO2fDIGxIkmyhPecfCLboqF7xLlWe2MOzl3nmhld6i6hxuq8Uiv1On8Vs6s3VZRqSpFlMPDtmwX2BDJ9MeHTOB98l6l2TeP0ADT7PtIIUcularUM5Ihw7gwmYQPsUnbAyP7l1n6gLWUe0gm4OSk9uXqb7T8qpOBOYJ5iRnyMqE0lcy+BeQ4PBIOX2+e+emkybPt4VD3TKlSg/M1lqfUsZTXKNwcqKG5GwJazIAj6w2mAzei0NUYmn8HIEhCeBKdgIjkI0/OIPH+DfijnVuslitry+rdPr3gBpXCMGPDnaz6crZ69k5czhY8ws5F651KDLEBO+v/WkvxtdzfCB81KQu0w/zoCNllzIMRRXqPArOFMKPVqVKH+uUvI/CVaIAJvDb9NuMq6uX1jX45nF8dZbOm0YEWaHC+BPRmIl+WbWDigtcbQi82uV8VS/Wvo1mfW3Z4Y2u4F/Y34Sh+A4a7B6/CQJqsifqPxnHoMIdRYzV4C1aHHHH0P76FX/oXIHaMI8lqnzoYE6OgT4I6/Ryor0r+2r1haO3O9XtL5trYyNFp6riLxlkJ/jtuApHYijnVFjAmriYzXzYzmZtHjwl4w1aH37J/hqYBR9ZU+vVCX0E3M4WZy/19DZb1QA2TJo7VGmbjec2vBHQKdvx028UHOhovFtO5yxTS2CzsBKUaxeTSWc4Et5nE1n20HP5TjnbL0K571gs9Rc1GKWTgi6hksgzCAIiPlF+Wxf+n

Thanks to both of you.

To address Vincent suggestions of other definitions, I strongly agree, but I have to use that one in my case :D Having a side proof is most of the time a better solution (at least for me)

Le mer. 10 oct. 2018 à 16:16, Vincent Laporte <vincent.laporte AT gmail.com> a écrit :
Hi Vincent,

As a complement to Dominique’s suggestion, here is an other
implementation that do not require any (interactive) proof of false: you
can provide dummy values (of any inhabited type) in unreachable
branches. Also, by generalizing the recursive call before destructing
the second argument, you get a chance to type-check it again in the
final branch.

Fixpoint vprod (n: nat) (v: vec nat n) : vec nat n → nat :=
  match v with
  | vnil => λ _, 0
  | vcons n' h t =>
    λ v',
    match v' in vec _ i return match i with O => unit | S j => (vec nat
j → nat) → nat end with
    | vnil => tt
    | vcons _ h' t' => λ rec, h * h' + rec t'
    end (vprod n' t)
  end.

Also, there are other definitions of the type vec that are much more
convenient to work with (e.g., a list packed with a proof that its size
is n).

Cheers,
--
Vincent.



Archive powered by MHonArc 2.6.18.

Top of Page