Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Fixpoint definitions over Z

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Fixpoint definitions over Z


chronological Thread 
  • 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





Archive powered by MhonArc 2.6.16.

Top of Page