. On-y-retrouve, 22 fonctionsélémentairesfonctionsélémentaires sur les ensembles On notera que chaque fonction est accompagnée d'une spécification informelle en commentaire. C'est en faitàfaità partir de ces spécifications informelles que nous avons bâti notre formalisation. Notre signature Coq commence donc de la mêmemanì ere que la signature Ocaml, ` a savoir par la déclaration des types des fonctions ensemblistes : Module Type S. Declare Module E : OrderedType. Definition elt := E.t. Parameter t : Set. Parameter empty : t. Parameter is_empty : t ? bool

. La-partie-spécification and . Deuxì-eme-moitié-de-la-signature-s-de-coq, est axée autour d'une relation logique d'appartenance In : elt?t?Prop. Cette relation est abstraite : ` a chaque module implantant nos ensembles finis d'en fournir une. La seule propriété exigée pour ce In est la compatibilité vis

. Au-final, en s'appuyant sur un type de données déjà connu, ` a savoir les listes, et plus précisément la fonction fold_right définie sur ces listes. Finalement, il s'agit d'une spécification assez proche de la version informelle du commentaire ci-dessus Au lieu de dire x1...xN sont 190 Programmation fonctionnelle certifiée lesélémentsleséléments de l'ensemble s , on affirme l est une liste sans redondance contenant tous lesélémentsleséléments de s et seulement ceux-ci . Bien sûr, l'appartenancè a notre liste et la nonredondance sontàsontà exprimer modulo E.eq, ce qui explique la définition de deux prédicats spécialisés InList et Unique paramétrés par uné egalité, nous avons opté pour une spécificationspécificationà la fois plus simple et plus expressive Voici donc la spécification définitive de fold : Parameter fold_1 : ?(A : Set)(i : A)(f : elt ? A ? A), ?l : list elt, Unique E.eq l ? (?x, In x s ? InList E.eq x l) ? fold f s i = fold_right f i l

A. Amerkad, Y. Bertot, L. Rideau, and L. Pottier, Mathematics and proof presentation in pcoq, Proceedings of Proof Transformation and Presentation and Proof Complexities (PTP'01), 2001.
URL : https://hal.archives-ouvertes.fr/inria-00072274

A. Balaa, Fonctions récursives générales dans le calcul des constructions, Thèse d'université, 2002.

A. Balaa and Y. Bertot, Fix-Point Equations for Well-Founded Recursion in Type Theory, pp.1-16
DOI : 10.1007/3-540-44659-1_1

H. Barendregt, Lambda Calculi with Types, Handbook of Logic in Computer Science, 1991.
DOI : 10.1017/cbo9781139032636

B. Barras, Auto-validation d'un système de preuves avec familles inductives, Thèse de doctorat, 1999.

J. Beauquier and B. Bérard, Systèmes d'exploitation : concepts et algorithmes, 1990.

M. J. Beeson, Foundations of Constructive Mathematics, 1980.
DOI : 10.1007/978-3-642-68952-9

R. Benzinger, Automated complexity analysis of Nuprl extracted programs, Journal of Functional Programming, vol.11, issue.1, pp.3-31, 2001.
DOI : 10.1017/S0956796800003865

S. Berardi, Pruning simply typed ?-calculi, Journal of Logic and Computation, vol.6, issue.2, 1996.

S. Berghofer, A Constructive Proof of Higman???s Lemma in Isabelle, Types for Proofs and Programs, 2003.
DOI : 10.1007/978-3-540-24849-1_5

S. Berghofer, Proofs, Programs and Executable Specifications in Higher Order Logic, 2003.

L. Boerio, Extending pruning techniques to polymorphic second order ??-calculus, Proceedings ESOP'94, 1994.
DOI : 10.1007/3-540-57880-3_8

S. Boutin, Using reflection to build efficient and certified decision procedures, TACS'97, 1997.
DOI : 10.1007/BFb0014565

D. Cachera, T. Jensen, D. Pichardie, and V. Rusu, Extracting a Data Flow Analyser in Constructive Logic, European Symposium on Programing, 2004.
URL : https://hal.archives-ouvertes.fr/inria-00564633

J. Chrz and ?. Aszcz, Implementing modules in the system Coq Modules in Type Theory with generative definitions, 16th International Conference on Theorem Proving in Higher Order Logics, 2003.

T. Coquand, An analysis of Girard's paradox, Proceedings of the First Symposium on Logic in Computer Science, 1986.

T. Coquand and D. Fridlender, A proof of Higman's lemma by structural induction Unpublished draft, 1993.

J. Courant, A module calculus for pure type systems, Typed Lambda Calculi and Applications 97, pp.112-128, 1997.
DOI : 10.1007/3-540-62688-3_32

L. Cruz-filipe, A Constructive Formalization of the Fundamental Theorem of Calculus, Types for Proofs and Programs, pp.108-126, 2002.
DOI : 10.1007/3-540-39185-1_7

L. Cruz-filipe, Constructive Real Analysis : a Type-Theoretical Formalization and Applications, 2004.

L. Cruz-filipe and B. Spitters, Program Extraction from Large Proof Developments, Theorem Proving in Higher Order Logics, 16th International Conference, pp.205-220, 2003.
DOI : 10.1007/10930755_14

URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.12.5946

L. Damas and R. Milner, Principal type-schemes for functional programs, Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '82, pp.207-212, 1982.
DOI : 10.1145/582153.582176

URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.645.5233

G. Dowek, G. Huet, and B. Werner, On the Definition of the Eta-long Normal Form in the Type Systems of the Cube, Informal Proceedings of the Workshop " Types, 1993.

C. Dubois, Typing Soundness of ML within Coq, pp.127-144

H. Benl, Proof theory at work : Program development in the Minlog system Automated Deduction : A Basis for Applications. Volume II, Systems and Implementation Techniques, 1998.

S. and P. Jones, Haskell 98, A Non-strict, Purely Functional Language, 1999.

J. Filliâtre, Preuve de programmes impératifs en théorie des types, Thèse de doctorat, 1999.

J. Filliâtre, Why : a multi-language multi-prover verification tool, Research Report, vol.1366, 2003.

J. Filliâtre and P. Letouzey, Functors for Proofs and Programs, European Symposium on Programing, 2004.
DOI : 10.1007/978-3-540-24725-8_26

H. Geuvers, F. Wiedijk, and J. Zwanenburg, A Constructive Proof of the Fundamental Theorem of Algebra without Using the Rationals, LNCS, vol.2277, pp.96-111, 2001.
DOI : 10.1007/3-540-45842-5_7

H. Geuvers and M. Niqui, Constructive Reals in Coq: Axioms and Categoricity, LNCS, vol.2277, pp.79-95, 2001.
DOI : 10.1007/3-540-45842-5_6

E. Giménez, An application of co-inductive types in Coq: Verification of the alternating bit protocol, Workshop on Types for Proofs and Programs, number 1158 in LNCS, pp.135-152, 1995.
DOI : 10.1007/3-540-61780-9_67

J. Girard, Y. Lafont, and P. Taylor, Proofs and Types. Cambridge Tracts in Theoretical Computer Science 7, 1989.

B. Grégoire and X. Leroy, A compiled implementation of strong reduction, International Conference on Functional Programming 2002, pp.235-246, 2002.

B. Grégoire, Compilation des termes de preuves : un (nouveau) mariage entre Coq et OCaml, 2003.

L. J. Guibas and R. Sedgewick, A dichromatic framework for balanced trees, 19th Annual Symposium on Foundations of Computer Science (sfcs 1978), pp.8-21, 1978.
DOI : 10.1109/SFCS.1978.3

R. Harper and M. Lillibridge, A type-theoretic approach to higher-order modules with sharing, Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '94, pp.123-137, 1994.
DOI : 10.1145/174675.176927

S. Hayashi and H. Nakano, PX, a Computational Logic, 1987.

C. A. Hoare, An axiomatic basis for computer programming, Communications of the ACM, vol.12583, issue.10, pp.576-580, 1969.

W. A. Howard, The formulae-as-types notion of constructions, to H.B. Curry : Essays on Combinatory Logic, Lambda Calculus and Formalism, 1969.

G. Huet, G. Kahn, and C. , Paulin-Mohring. The Coq Proof Assistant -A tutorial - Version 8.0, 2004.

S. C. Kleene, Introduction to Metamathematics, 1952.

C. Kreitz, The Nuprl Proof Development System, Version 5, 2002.

O. Lee and K. Yi, Proofs about a folklore let-polymorphic type inference algorithm, ACM Transactions on Programming Languages and Systems, vol.20, issue.4, pp.707-723, 1998.
DOI : 10.1145/291891.291892

X. Leroy, A modular module system, Journal of Functional Programming, vol.10, issue.3, pp.269-303, 2000.
DOI : 10.1017/S0956796800003683

URL : https://hal.archives-ouvertes.fr/inria-00073825

X. Leroy, J. Vouillon, D. Doliguez, J. Garrigue, and D. Rémy, The Objective Caml system ? release 3, 2003.

P. Letouzey, Exécution de termes de preuves : une nouvelle méthode d'extraction pour le Calcul des Constructions Inductives, 2000.

P. Letouzey, A New Extraction for Coq Types for Proofs and Programs, Second International Workshop, TYPES 2002, Berg en Dal, The Netherlands, Lecture Notes in Computer Science, vol.2646, 2002.

P. Letouzey and L. Théry, Formalizing St??lmarck???s Algorithm in Coq, pp.387-404
DOI : 10.1007/3-540-44659-1_24

Z. Luo, Computation and Reasoning ; a type theory for Computer Science, International Series of Monographs in Computer Science. Oxford Science Publication, vol.11, 1994.

P. Martin-löf, Intuitionistic Type Theory, Bibliopolis, 1984.

R. Milner, A theory of type polymorphismn programming, Journal of Computer and System Sciences, vol.17, 1978.

J. Monin, Extracting programs with exceptions in an impredicative type system, Mathematics of Program Construction, 1995.
DOI : 10.1007/3-540-60117-1_19

J. Monin, Contribution aux méthodes formelles pour le logiciel. Mémoire d'habilitationàtionà diriger des recherches, 2002.

D. Monniaux, Réalisation mécanisée d'interpréteurs abstraits, 1998.

C. Murthy and J. R. Russell, A constructive proof of Higman's lemma, [1990] Proceedings. Fifth Annual IEEE Symposium on Logic in Computer Science, pp.257-267, 1990.
DOI : 10.1109/LICS.1990.113752

C. Okasaki, Purely functional data structures, 1998.
DOI : 10.1017/CBO9780511530104

C. Parent, Synthèse de preuves de programmes dans le Calcul des Constructions Inductives . thèse d'université, 1995.

C. Paulin-mohring, Extracting ??'s programs from proofs in the calculus of constructions, Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages , POPL '89, 1989.
DOI : 10.1145/75277.75285

C. Paulin-mohring, Extraction de programmes dans le Calcul des Constructions, Thèse d'université, 1989.
URL : https://hal.archives-ouvertes.fr/tel-00431825

C. Paulin-mohring, Définitions Inductives en Théorie des Types d'Ordre Supérieur. HabilitationàHabilitationà diriger les recherches, 1996.

C. Paulin-mohring and B. Werner, Synthesis of ML programs in the system Coq, Journal of Symbolic Computation, vol.15, issue.5-6, pp.607-640, 1993.
DOI : 10.1016/S0747-7171(06)80007-6

L. Pottier, Extraction dans le calcul des constructions inductives, Journées Francophones des Langages Applicatifs, 2001.

D. Prawitz, Natural Deduction, A Proof-Theoretical Study, Almqvist & Wiksell, 1965.

F. Prost, Interprétation de l'analyse statique en théorie des types, 1999.

H. Schwichtenberg, Constructive analysis with witnesses, Proceedings of Marktoberdorf '03 Summer School, 2003.

M. Seisenberger, On the Constuctive Content of Proofs, 2003.

M. Serrano and P. Weis, Bigloo: a portable and optimizing compiler for strict functional languages, 2nd Static Analysis Symposium (SAS), pp.366-381, 1995.
DOI : 10.1007/3-540-60360-3_50

P. Severi and N. Szasz, Studies of a theory of specifications with built-in program extraction, Journal of Automated Reasoning, vol.27, issue.1, 2001.

J. Signoles, Calcul statique des applications de modules paramétrés, Journées Francophones des Langages Applicatifs, 2003.

K. Thompson, Reflections on trusting trust, Communications of the ACM, vol.27, issue.8, pp.761-763, 1984.
DOI : 10.1145/358198.358210

URL : http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.514.7639

A. S. Troelstra and D. Van-dalen, Constructivism in Mathematics : an Introduction, Studies in Logic and the Foundations of Mathematics, 1988.

P. Wadler, W. Taha, and D. Macqueen, How to add laziness to a strict language, without even being odd, Workshop on Standard ML, 1998.

B. Werner, Méta-théorie du Calcul des Constructions Inductives, Thèse d'université, 1994.