coq-club AT inria.fr
Subject: The Coq mailing list
List archive
Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t)
Chronological Thread
- From: Talia Ringer <tringer AT cs.washington.edu>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t)
- Date: Mon, 16 May 2022 18:39:44 -0700
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=tringer AT cs.washington.edu; spf=Pass smtp.mailfrom=tringer AT cs.washington.edu; spf=None smtp.helo=postmaster AT mx7.cs.washington.edu
- Ironport-data: A9a23:HuLj0KnztMSpaN0HPI8sPnLo5gy1IERdPkR7XQ2eYbSJt1+Wr1Gzt xJLXzuAbKrbNjbzKNx/Ptjip0sE7Z6Az9AwSVBk+SlkEFtH+JHPbTi7BhepbnnKdqUvb2o+s p5AMoGYRCwQZiWBzvt4GuG59RGQ7YnRGvykTrSs1hlZHWeIcg944f5Ys7N/09cAbeSRWVvX4 4uv+pOHYjdJ5hYtWo4qw/LbwP9QlK+q0N8olgRWiSdj4TcyP1FMZH4uDfnZw0nQGuG4LcbmL wr394xVy0uCl/sb5nxJpZ6gGqECaua60QFjERO6UYD66vRJjnRaPqrWqJPwZG8P4whlkeydx /1OsZKMYxUqGZbIt+YSViBFKStBGKRZreqvzXiX6aR/zmXDYySqyO4oE0gtPYwe9fpwBydD+ eFwxDIlN0zbwbvqmvTgDLAw16zPL+GzVG8bkm16zDfWAOwOSouFXKzR5d5e0ys3gIZDEeu2i 88xMGY1MkybOE0n1lE/GowxjcuimEHFSX5jikObn5Np6mHX5VkkuFTqGIeMJIzUHq25hH2wr WXfum/9HxsyL82a0TPD83S2h+aJkzmTZW4JPLioqbhhmxuMz3cTCRsZSVy95/S1lyZSRu6zN WQX/iQSh7ox03evYdvyWiSlmnS7mxcDDo84//IB1CmBza/d4gC8D2cCTyJcZNFOiCPQbWB2v rNut4+2bQGDoIF5WlrBqenK9mra1Tw9aDZYP3RcF1ptD8zL/dlbs/7Zcjp0/EdZZPXOFDjs3 zSHxMTVr+RD1JZWv0lXEKCuvt5NmnQrZlVtjuk0djv7hu+cWGJCT9X2gWU3Fd4acO6koqCp5 RDoYfS24uEUFo2qnyeQWugLF7zBz6/bbWeD2wM/Rch+pmnFF5ufkWZ4vG8WyKBBbpdsRNMVS BO7Vf55v8cOYiX2BUOJS9/qVKzGMpQM5fy4D66EMIEmjmlZaQmG4ix0fk+MzijqngAzmLo/O JGUbcGqZUv2+ow6pAdas9w1j+V3rh3SM0uOHcijp/lmuJLFDEOopUAtagDeM7xotfrZ/204M b93bqO39vmWa8WmCgG/zGLZBQliwaETCc+kpspJWPSEJwY6SmgtB+WInuEqYMp6lr9Vl+HH4 na7HEJU1QOn13HALAyLbFFlaa/uAMwh9C1lZXR0MAb6wWUnbKau8LwbJsk+crQQ/eB+yeJ5E qsecMKaD/UTEjnKomxPbZT0oIF4Wg6sgAaCY3isbDQlJsEyTBeP5db/fgrp+zUJCGy6udZn+ ++s0QbSQJwiQQV+DZuMNqvwkQvp5XVEwbB8RUrFJNVXaX7AyokyJnyjlOIzLuENNQ7Hl2mT2 AuhCBsFofXA/t0u+97TiKHY94qkHrcsHkdeGGWHv7+6OTOApzim0dAGW/3OYjnGVGLy97mlY 6NYw+ylaK8Lm1NDsoxdFbd3zP9kuYKw+ecClgk0Tm/Wa1mLC697JifU18d4tppSy+ILogCxQ E+OpIVXYO3bJMP/HVcNDwM5deDfh+oMkzzf4KhnOkn8/yMrrrOLXV8IZkuJmHMbJ6AzL4o+w eYnt9IR7UqyhgdzaoSKiSVd9mKtKH0cUvh96MhFXtez0gd7mEtfZZH8CzPt5M/dYdt7Mn41L 2LGn6HFnbldmBbPKiJhCXjX0ONBrp0SoxQWnkQaLlGEl9etaiXbB/GNHeDbjzi5zymrF8p2K jctPFYzOqyV/zZui9REWSahFxwp6Nh1PKDu4wNhqYEbZxDAuq/xwKkVMv3L40kC82NacSRc+ veVxHuNvfPCYpTqxiVrMaJ6g6WLcDGynzEuXOisBIKaFoI6YDzqnqioI2cEtnMLxC/3aFLv/ YFXwQq7VUE32eP8bUH250l2GIn8kCy5GVE=
- Ironport-hdrordr: A9a23:OpP6IaF+kasyGaZFpLqEMMeALOsnbusQ8zAXPiFKOGdom6mj/f xG885rsSMc5AxhPU3I3OrwWpVoIkm9yXcW2/h2AV7KZmCP0wbFEGgh1/qA/9SKIVyGygcy79 YZT0G8MrLNJGk/o8Lz4Az9Nc0hztmB+KXtoevF1X9iQUVLRshbnmBE48qgfHGejTMmOaYE
- Ironport-phdr: A9a23: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 scidUWIUEZpwbeMRUxhCA==
- Ironport-sdr: JPaNUJ0KQVKrsr4qKYRXE5FZZ3oXPMOEKK2ufP3t/Y5pLoVqIPgkeKOCwkVuwL3VLJRH9ckbp6 rmEw7IUEPx18259KytV4OrFlzJmLc2bpqbJ52tgKUCguF5fV9Ldv8SWnmAdNGs1CfrMxEExznL 9o48SkI/swGW5TxQ80Rwl+On0Z+wKA5pFFJDKHQaXbzGqP+OWZS+cetkwVRK9JCr4p0NEfJToU v6sX9I0WhFRvBra9PS6oxCBzPLPViu/0pprdFkNDnIIyH+cakPInm5FglgAOfWVDGXrGNKjj84 b3cQdiufsXHjGaf4v0Orr8hK
I'll throw out a quick plug for our proof repair work that lets you get between those two definitions of vectors automatically, albeit with some caveats:
For example:
On Mon, May 16, 2022, 6:27 PM Qinshi Wang <qinshiw AT cs.princeton.edu> wrote:
I would like to pop up with my piece of experience. I agree with jtm that refinement type (a type with a constraint, e.g. {xs : list a | length xs = n}) is easier to use. In particular, it's nice to bind additional information like lengths as a part of types when we don't need to maintain it explicitly. For example, when we have lists of the same length and we usually only read and write to list entries without changing length. In this case, dependent type is your friend. But when you need to write functions to construct lists of different lengths, dependent type is not so friendly. For example, you need to annotate the length for each intermediate value. So refinement type provides the flexibility that one can maintain the constraint part when it's useful and drop it when it's a burden. When it's needed again, we can reconstruct the constraint by giving a proof. Program definition [2] makes this procedure easier. For example,Require Import Coq.Program.Tactics.Definition vector A n := {xs : list A | length xs = n}.Program Definition vector_app {A n m} (xs : vector A n) (ys : vector A m) : vector A (n+m) :=exist _ (app xs ys) _.Next Obligation....Qed.This makes the definition more clear. And a benefit is that the definition is transparent but the proof for the constraint is opaque.We have an open-source tool [3] for proving list length and indexing that you might find useful. It has a nice automatic prover. It is for basic lists indexed by Z instead of nat, because Z is more intuitive for arithmetic (while the advantage for nat is induction).Thanks,QinshiOn Mon, May 16, 2022 at 11:08 AM jtm <me AT jtm.cx> wrote:On Sun, 2022-05-15 at 19:40 +0100, mukesh tiwari wrote:
> Hi everyone,
>
> Have you formalised some non-trivial project using vectors, and
> finite type [1]? If yes, then what was your experience? What did you
> like and what did you not like about it? Also, could you point me
> towards your project?
I don't have much experience working with [1], but in the couple
instances where I have, I found it very difficult to do dependent
pattern matching (i.e. `match x return y ...`). I found the following
definition to be much easier to work with:
Definition vector a n :=
{ xs : list a | length xs = n }.
I prefer this definition for a couple reasons, First, you can write
functions in terms of plain old lists, and then prove things about
their lengths later. Second, a lot of proofs regarding length can
be solved using `lia`. A big disadvantage is that some functions
regarding vectors need to be defined inside proof blocks to deal
with propositions regarding vector length.
An example of defining vector concatenation:
Definition vector_append : forall a m n,
vector a m -> vector a n -> vector a (m + n).
Proof.
intros a m n [xs P] [ys Q].
exists (xs ++ ys).
rewrite List.app_length.
subst. reflexivity.
Defined.
Best,
jtm
> [1] https://coq.inria.fr/library/Coq.Vectors.VectorDef.html
- [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), mukesh tiwari, 05/15/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Dominique Larchey-Wendling, 05/16/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), jtm, 05/16/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Qinshi Wang, 05/17/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Talia Ringer, 05/17/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Dominique Larchey-Wendling, 05/17/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Qinshi Wang, 05/17/2022
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), D. Ben Knoble, 05/16/2022
- <Possible follow-up(s)>
- Re: [Coq-Club] Experience with formalising projects with length indexed vector (Vector.t) and finite type (Fin.t), Weijer, W. de (Wessel), 05/17/2022
Archive powered by MHonArc 2.6.19+.