diff options
author | letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2003-06-13 23:58:30 +0000 |
---|---|---|
committer | letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2003-06-13 23:58:30 +0000 |
commit | 1bb6d2a4aa011223cfc59395d361fe4a865c036d (patch) | |
tree | c9e7096a27e568de1f674355bae34a07ec3dcc0e /theories/FSets/FSetBridge.v | |
parent | be5e03b8a281e7b9ffde9da2ab168d2df77ba776 (diff) |
changement de spécif du fold
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@4159 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'theories/FSets/FSetBridge.v')
-rw-r--r-- | theories/FSets/FSetBridge.v | 67 |
1 files changed, 27 insertions, 40 deletions
diff --git a/theories/FSets/FSetBridge.v b/theories/FSets/FSetBridge.v index 257aa9e8b..c3a4be64d 100644 --- a/theories/FSets/FSetBridge.v +++ b/theories/FSets/FSetBridge.v @@ -100,27 +100,22 @@ Module DepOfNodep [M:S] <: Sdep with Module E := M.E. Save. Definition fold : - (A:Set) - (f:elt->A->A) - { fold:t -> A -> A | (s,s':t)(a:A) - (eqA:A->A->Prop)(st:(Setoid_Theory A eqA)) - ((Empty s) -> (eqA (fold s a) a)) /\ - ((compat_op E.eq eqA f)->(transpose eqA f) -> - (x:elt) (Add x s s') -> ~(In x s) -> (eqA (fold s' a) (f x (fold s a)))) }. - Proof. - Intros; Exists (!fold A f); Intros. - Split; Intros. - Apply fold_1; Auto. - Apply (!fold_2 s s' x A eqA); Auto. + (A:Set)(f:elt->A->A)(s:t)(i:A) + { r : A | (EX l:(list elt) | + (Unique E.eq l) /\ + ((x:elt)(In x s)<->(InList E.eq x l)) /\ + r = (fold_right f i l)) }. + Proof. + Intros; Exists (!fold A f s i); Exact (fold_1 s i f). Save. Definition cardinal : - {cardinal : t -> nat | (s,s':t) - ((Empty s) -> (cardinal s)=O) /\ - ((x:elt) (Add x s s') -> ~(In x s) -> - (cardinal s')=(S (cardinal s))) }. + (s:t) { r : nat | (EX l:(list elt) | + (Unique E.eq l) /\ + ((x:elt)(In x s)<->(InList E.eq x l)) /\ + r = (length l)) }. Proof. - Intros; Exists cardinal; EAuto. + Intros; Exists (cardinal s); Exact (cardinal_1 s). Save. Definition fdec := @@ -544,38 +539,30 @@ Module NodepOfDep [M:Sdep] <: S with Module E := M.E. Intros s s' x; Unfold diff; Case (M.diff s s'); Ground. Save. - Definition cardinal : t -> nat := let (f,_)= M.cardinal in f. + Definition cardinal : t -> nat := [s]let (f,_)= (M.cardinal s) in f. - Lemma cardinal_1 : (s:t)(Empty s) -> (cardinal s)=O. - Proof. - Intros; Unfold cardinal; Case M.cardinal; Ground. - Qed. - - Lemma cardinal_2 : - (s,s':t)(x:elt)~(In x s) -> (Add x s s') -> - (cardinal s')=(S (cardinal s)). - Proof. - Intros; Unfold cardinal; Case M.cardinal; Ground. + Lemma cardinal_1 : + (s:t)(EX l:(list elt) | + (Unique E.eq l) /\ + ((x:elt)(In x s)<->(InList E.eq x l)) /\ + (cardinal s)=(length l)). + Proof. + Intros; Unfold cardinal; Case (M.cardinal s); Ground. Qed. Definition fold : (B:Set)(elt->B->B)->t->B->B := - [B,f]let (fold,_)= (M.fold f) in fold. + [B,f,i,s]let (fold,_)= (M.fold f i s) in fold. Lemma fold_1: - (s:t)(A:Set)(eqA:A->A->Prop)(st:(Setoid_Theory A eqA))(i:A)(f:elt->A->A) - (Empty s) -> (eqA (fold f s i) i). + (s:t)(A:Set)(i:A)(f:elt->A->A) + (EX l:(list elt) | + (Unique E.eq l) /\ + ((x:elt)(In x s)<->(InList E.eq x l)) /\ + (fold f s i)=(fold_right f i l)). Proof. - Intros; Unfold fold; Case (M.fold f); Ground. + Intros; Unfold fold; Case (M.fold f s i); Ground. Save. - Lemma fold_2: - (s,s':t)(x:elt)(A:Set)(eqA:A->A->Prop)(st:(Setoid_Theory A eqA)) - (i:A)(f:elt->A->A)(compat_op E.eq eqA f) -> (transpose eqA f) -> - ~(In x s) -> (Add x s s') -> (eqA (fold f s' i) (f x (fold f s i))). - Proof. - Intros; Unfold fold; Case (M.fold f); Ground. - Save. - Definition f_dec : (f: elt -> bool)(x:elt){ (f x)=true } + { (f x)<>true }. Proof. |