Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Coq Standard Library Requests

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Coq Standard Library Requests


Chronological Thread 
  • From: Larry Darryl Lee <llee454 AT gmail.com>
  • To: "coq-club AT inria.fr" <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Coq Standard Library Requests
  • Date: Thu, 23 Aug 2018 10:52:19 -0400
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=llee454 AT gmail.com; spf=Pass smtp.mailfrom=llee454 AT gmail.com; spf=None smtp.helo=postmaster AT mail-qk0-f172.google.com
  • Ironport-phdr: 9a23:uDcByRWlUUmHJB/qumY20tj/SXbV8LGtZVwlr6E/grcLSJyIuqrYYxCPt8tkgFKBZ4jH8fUM07OQ7/i/HzRYqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba9wIRmssQndqtQdjJd/JKo21hbHuGZDdf5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2Ao/8LrrgXMTRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VDK/5KptVRTmijoINyQh/W/Ul8J+jLxVrhyjqBxx34HaZ46aOvVlc6PBft4XX3ZNU9xNWyFDBI63cosBD/AGPeZdt4TzoUEBrQGkBQisGejhxCVHhmXs3aw61+QqDAfI0xI+ENkTt3nUqNH1O7kMXu26zKTFwi7Ob/xT2Tjn6YjIdgotru2LXbJ1aMfcz1QkGQDdjliIt4DpIzeY2v4OvmWb9eZsS/yjh3I9pw1soDWj2N8ghpfVio8R0FzJ9CR0zJwxKNC3UkJ2Y9GpHZ1NvC+ALYR2WNktQ2RwtSY61LIGvZm7cTAPyJs9xh7fb+WLc5GL4h7/TeqRLyp0iXB7dL6liBay9k+gyuL4VsaqylpFsi1FktzUunAM0Rzc9NSHR+Nj8ku93TuDzQPe5+FeLUwqi6bXN4QtzqMym5YNqUjDGzX5mETyjK+YbEUk/e2o5vzjYrXiuJCTKYB5hwHxP6k1lcy/BP43MgkKX2SB5eu807jj8VXjQLpWlv02jrXZsJfCKMsHoa65GhZZ3Zon6xaiFDiry88YnHkCLFJdYh2LlYnpO1fUIPD5F/izmVqskC04j8zBa/fqBYyIJXzemp/ge6x84ghS0kB7mdtY/tdfDqwLCPP1QE748tLCWEwXKQuxlsLuEs9snq8XQ3ieBue9Pa6a5VuM6+9zfrWka4ocuTK7IP8gsa29xUQlkEMQKPH6laAcb2q1S6w/chepJEH0i9JEKl8k+w83TejkklqHCGcBaHO7XqZ67TY+Wtv/UdXzA7u1ibnE5x+VW4VMbzkfWF+JGHbsMY6DXqVUMX/AEopaijUBEIOZZcoh2BWp7lGozrNmKq/N+XVdu8u8jp564OrckRx0/jtxXZyQ

Hi Coq Moderators,

I previously sent the following message from
larry.lee AT nolijconsulting.com.
Please disregard that message and post
the message I sent from
llee454 AT gmail.com,
as this is my personal email
address and the one I'd like to use with the Coq Club mailing list.

I apologize for the confusion,
Thanks,

- Larry Lee

On Thu, 2018-08-23 at 10:50 -0400, Larry Darryl Lee wrote:
> Hi,
>
> I recently worked on a small project and noticed that the List
> library
> within the Coq Standard library is missing two obvious proofs.
>
> First, the List library defines a proof `Forall_impl` that has an
> obvious analog for the `Exists` predicate.
>
> Second, the List library defines a proof `Forall_inv` that applies to
> the head of a list, but lacks the obvious analogue for the tail of a
> list.
>
> I'd like to propose adding two proofs to the Standard List library.
> The
> first, is a proof `Exists_impl` which fills the gap left by
> `Forall_impl`:
>
>     (**
>       Accepts two predicates, [P] and [Q], and a
>       list, [xs], and proves that, if [P -> Q],
>       and there exists an element in [xs] for which
>       [P] is true, then there exists an element in
>       [xs] for which [Q] is true.
>     *)
>     Definition Exists_impl
>       :  forall (A : Type) (P Q : A -> Prop),
>          (forall x : A, P x -> Q x) ->
>          forall xs : list A,
>            Exists P xs ->
>            Exists Q xs
>       := fun _ P Q H xs H0
>            => let H1
>                 :  exists x, In x xs /\ P x
>                 := proj1 (Exists_exists P xs) H0 in
>               let H2
>                 :  exists x, In x xs /\ Q x
>                 := ex_ind
>                      (fun x H2
>                        => ex_intro
>                             (fun x => In x xs /\ Q x)
>                             x
>                             (conj
>                               (proj1 H2)
>                               (H x (proj2 H2))))
>                      H1 in
>               (proj2 (Exists_exists Q xs)) H2.
>
>     Arguments Exists_impl {A} {P} {Q} H xs H0.
>
> The second is a proof `Forall_inv_tail` that fills the gap left by
> `Forall_inv`. It's proof is similarly easy:
>
>     (**
>       Accepts a predicate, [P], and a list, [x0 ::
>       xs], and proves that if [P] is true for every
>       element in [x0 :: xs], then [P] is true for
>       every element in [xs].
>     *)
>     Definition Forall_inv_tail
>       :  forall (A : Type) (P : A -> Prop) (x0 : A) (xs : list A),
>     Forall P (x0 :: xs) -> Forall P xs
>       := fun _ P x0 xs H
>            => let H0
>                 :  forall x, In x (x0 :: xs) -> P x
>                 := proj1 (Forall_forall P (x0 :: xs)) H in
>               let H1
>                 :  forall x, In x xs -> P x
>                 := fun x H2
>                      => H0 x (or_intror (x0 = x) H2) in
>               proj2 (Forall_forall P xs) H1.
>
>     Arguments Forall_tail {A} {P} x0 xs.
>
> At the moment, I've defined these proofs in a small personal library
> that I include in most of my projects, but I'd like to see these
> obvious extensions included in the Standard Library one day.
>
> Who should a I propose these additions to? What are the rules for
> adding theorems to the Coq Standard Library?
>
> - Larry Lee



Archive powered by MHonArc 2.6.18.

Top of Page