coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Hermann Lehner <hermann.lehner AT inf.ethz.ch>
- To: Jean-Marc Notin <notin AT lix.polytechnique.fr>
- Cc: Coq Club <coq-club AT pauillac.inria.fr>
- Subject: Re: [Coq-Club] Fixpoint definitions over Z
- Date: Tue, 27 May 2008 10:05:04 +0200
- List-archive: <http://pauillac.inria.fr/pipermail/coq-club/>
Hi,
Thanks for your tips.
There is different ways in Coq for defining such a function. One is to
use the 'Function' definition:
Function SumFilterZRec (z: Z) (filter: Z -> bool) (hi: Z) {wf Zgt z} :
[...]
This seems to be a pretty cool concept. Finally I got it through with a different WF relation (using Zwf).
Require Import ZArith.
Require Import Recdef.
Require Import Zwf.
Open Scope Z_scope.
Parameter hi : Z.
Parameter lo : Z.
Parameter filter : Z -> bool.
Definition ZltWf : Z -> Z -> Prop :=
fun x y : Z => Zwf lo x y.
Function SumFilterZRec (z: Z) {wf ZltWf z} :
Z :=
match Zcompare lo z with
| Lt => if filter z then
z + SumFilterZRec (z-1)
else
SumFilterZRec (z-1)
| _ => 0
end.
Proof.
intros; split;
[cut (lo < z);
[omega
|red;assumption]
|omega].
intros; split;
[cut (lo < z);
[omega
|red;assumption]
|omega].
apply (Zwf_well_founded lo).
Qed.
Definition SumFilterZ : Z :=
match Zcompare lo hi with
| Lt => SumFilterZRec hi
| _ => 0
end.
Best regards
Hermann ^[:wq
--
http://www.hermann-lehner.com
- [Coq-Club] Fixpoint definitions over Z, Hermann Lehner
- Re: [Coq-Club] Fixpoint definitions over Z,
Jean-Marc Notin
- Re: [Coq-Club] Fixpoint definitions over Z, Hermann Lehner
- Re: [Coq-Club] Fixpoint definitions over Z, Adam Chlipala
- Re: [Coq-Club] Fixpoint definitions over Z,
Jean-Marc Notin
Archive powered by MhonArc 2.6.16.