coq-club AT inria.fr
Subject: The Coq mailing list
List archive
[Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern
Chronological Thread
- From: "Soegtrop, Michael" <michael.soegtrop AT intel.com>
- To: "coq-club AT inria.fr" <coq-club AT inria.fr>
- Subject: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern
- Date: Tue, 6 Sep 2016 16:00:40 +0000
- Accept-language: de-DE, en-US
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=michael.soegtrop AT intel.com; spf=Pass smtp.mailfrom=michael.soegtrop AT intel.com; spf=None smtp.helo=postmaster AT mga03.intel.com
- Ironport-phdr: 9a23:7QlFGB13ke5QGXNwsmDT+DRfVm0co7zxezQtwd8ZsegWLPad9pjvdHbS+e9qxAeQG96KsrQZ2qGG4uigATVGusnR9ihaMdRlbFwst4Y/p0QYGsmLCEn2frbBThcRO4B8bmJj5GyxKkNPGczzNBX4q3y26iMOSF2kbVImbre9JomHxc+wzqW5/4DZSwROnju0J71oZl3ipgLI88ISnIFKK6AryxKPrGEeKMpMwmY9b2mUkhng/MCouNZG8i9Qsv8lvYYUVKTxf601SfpDCzkpL3oy/OXqswXOSU2E4X5KATZeqQZBHwWQtEKyZZz2qCav7uc=
Dear Coq Users,
I have a question regarding reduction of proof terms with dependent types, especially reduction of matches with single patterns. A simple example is this:
Require Import Vector.
Program Fixpoint vector_rev {A : Type} {n1 n2 : nat} (v1 : Vector.t A n1) (v2 : Vector.t A n2) : Vector.t A (n2+n1) := match v1 in Vector.t _ n1' return Vector.t A (n2 + n1') with | nil _ => v2 | cons _ e n1' sv => vector_rev sv (cons A e n2 v2) end.
Definition Example2_01 := cons bool false 1 ( cons bool true 0 ( nil bool )).
Eval compute in vector_rev Example2_01 (nil bool).
This results in:
= match plus_n_Sm 0 1 in (_ = y) return (t bool y) with | eq_refl => match plus_n_Sm 1 0 in (_ = y) return (t bool y) with | eq_refl => match plus_n_O 2 in (_ = y) return (t bool y) with | eq_refl => cons bool true 1 (cons bool false 0 (nil bool)) end end end : t bool (0 + 2)
I wonder why Coq can’t reduce this to “cons bool true 1 (cons bool false 0 (nil bool))”. All the matches have just one pattern, so it should be obvious which one it is. I guess this is required to show that “t bool (0 + 2)” is the same as “t bool 2” but isn’t there a simpler way which computes?
If a match is just there to transform types, can’t Coq reduce the match if the types would unify without the match?
Would it help if plus_n_Sm would not be opaque? Which brings me to the question how I can control automation of Program proof obligations.
Best regards,
Michael
P.S.: If I use Vector.t A (n1+n2) it also works, but the proof terms get larger.
P.P.S.P I sent this message already yesterday but apparently there was a server issue. My apologizes if someone got it twice. Intel Deutschland GmbH |
- [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/06/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Matthieu Sozeau, 09/06/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Jonathan Leivent, 09/06/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Jonathan Leivent, 09/06/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/06/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Jonathan Leivent, 09/06/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/06/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/07/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Guillaume Melquiond, 09/07/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/07/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Guillaume Melquiond, 09/07/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/07/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Guillaume Melquiond, 09/07/2016
- RE: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Soegtrop, Michael, 09/07/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Guillaume Melquiond, 09/07/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Jonathan Leivent, 09/06/2016
- Re: [Coq-Club] Getting "computing" proof terms with dependent types / reduction of matches with single pattern, Matthieu Sozeau, 09/06/2016
Archive powered by MHonArc 2.6.18.