coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Vincent Siles <vincent.siles AT ens-lyon.org>
- To: Coq-Club Club <coq-club AT inria.fr>
- Subject: [Coq-Club] Dependent match on two vectors
- Date: Wed, 10 Oct 2018 15:37:29 +0200
- Authentication-results: mail3-smtp-sop.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:4++ilR2TrReg5SYqsmDT+DRfVm0co7zxezQtwd8ZseIRK/ad9pjvdHbS+e9qxAeQG9mDtLQc06L/iOPJYSQ4+5GPsXQPItRndiQuroEopTEmG9OPEkbhLfTnPGQQFcVGU0J5rTngaRAGUMnxaEfPrXKs8DUcBgvwNRZvJuTyB4Xek9m72/q99pHPYQhEniaxba9vJxiqsAvdsdUbj5F/Iagr0BvJpXVIe+VSxWx2IF+Yggjx6MSt8pN96ipco/0u+dJOXqX8ZKQ4UKdXDC86PGAv5c3krgfMQA2S7XYBSGoWkx5IAw/Y7BHmW5r6ryX3uvZh1CScIMb7Vq4/Vyi84Kh3SR/okCYHOCA/8GHLkcx7kaZXrAu8qxBj34LYZYeYP+d8cKzAZ9MXXWVOUMZfWSJCH42ycZcAAvEbMupEtYTwvUcCoQe8CASqGejhyiVIhnjz3aAi3OshEAfG0xA+ENIIrHTfscj7NKYWUe+r16nD0DLOb+1X2Tf79IfHbBYhoe2WUbJrcMrRzVcgFxjeg1qOr4zlJCqZ1uANsmic6epsT+Wvi3QoqwxopDWk28QiipHRi44IxV3I6T91zYQ3KNGiVUJ2YN+pHIFNuyyUNIZ6Wt0uT31stSogybALuYS3cDULxZkm3RLTdv6KfouO7xn+TuieOy14i2hgeL+nhxa970ygyurkW8mv11ZKqDBKksXWuXwXyRPT7NOHRuJ5/kah3jaP0Rrf6uZeIUA7jabbKpghzaAslpcLrEjOETP6lF/0gaKUbEko5+ml5uX9brn7qJKRNJd4igTkPaQvnsy/D/44Mg8LX2WD5OqyyKDt8VHhTbtJivM7k63UvYjdK8sbvqO2HQlV0p065xa7Dzam19IYkWMALFJfdxKKl5bpO1DIIP/kE/i/hUisnC1wx/DHOr3uHI7NI2PYn7fmYLZ97VJTxxQpwd9B4ZJUEagNIPbzW0/2stzUFBg5Mxa7w+r/EtVyypseWX6TAq+eKK7drViI5vs2L+aQYI8VpS3yJuM+5//uiH85gUUScbOo3ZsRcnC4H+5pL1+XYXr20Z89FjIhuRN7Z+j3ghWpVSNZLyK5WLt57TUmAqqnC53CT8ajmurS8j28G8hoZ2ZNB1aQWUzpc4ifE6MSaSSZL8l91CcFUbW6Y4InzlSqpQj8jb19IbyHqWUjqZv/2Y0ttKXonhYo+GkxVpzFijDffyRPhmoNAgQO8uV6qE15xE2E1PIh0fZfCNpY6rVEVBx/MY/byap9Ed+gAludLOfMc06vR5CdOR90Vsg4moNcbkBmXtGziRaF2DClUedMyu67Qacs+6eZ5EDfYsZwz3Gcjfs6iF8vXsIJOGu9w6pu8A6VAJTGwRyU
Dear Coq-Clubbers,
I'm trying to define the product of two vectors of the same size, with something like
Inductive vec (A: Type) : nat -> Type :=
| vnil : vec A 0
| vcons : forall n, A -> vec A n -> vec A (1 + n)
.
Arguments vnil [A].
Arguments vcons [A] n hd tl.
Fixpoint vprod (n: nat) (v1 v2: vec nat n) : nat :=
match v1 in vec _ n0, v2 in vec _ n0 return nat with
| vnil, vnil => 0
| vnil, vcons _ _ _ => False_rect nat _ (* 1 *)
| vcons _ _ _, vnil => False_rect nat _ (* 1 *)
| vcons _ hd1 tl1, vcons _ hd2 tl2 => (hd1 * hd2) + vprod _ tl1 tl2 (* 2 *)
end
.
But I have two issues:
- Impossible branches (* 1 *) fail with 'False_rec nat has type False -> nat instead of nat' if I don't add the _. I usually don't have to do that on impossible branches
- (* 2 *) fails with
In environment
vprod : forall n : nat, vec nat n -> vec nat n -> nat
n : nat
v1 : vec nat n
v2 : vec nat n
n0 : nat
hd1 : nat
tl1 : vec nat n0
v0 : vec nat (1 + n0)
n1 : nat
hd2 : nat
tl2 : vec nat n1
The term "tl2" has type "vec nat n1"
while it is expected to have type
"vec nat n0".
How can I unify ""n0"" and ""n1"" here so that it types check ? I presume my match statement is buggy
Best,
V.
- [Coq-Club] Dependent match on two vectors, Vincent Siles, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Dominique Larchey-Wendling, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Vincent Laporte, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Vincent Siles, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Dominique Larchey-Wendling, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Vincent Siles, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Vincent Laporte, 10/10/2018
- Re: [Coq-Club] Dependent match on two vectors, Dominique Larchey-Wendling, 10/10/2018
Archive powered by MHonArc 2.6.18.