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 ,
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 ,
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 ,
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
Fonctions récursives générales dans le calcul des constructions, Thèse d'université, 2002. ,
Fix-Point Equations for Well-Founded Recursion in Type Theory, pp.1-16 ,
DOI : 10.1007/3-540-44659-1_1
Lambda Calculi with Types, Handbook of Logic in Computer Science, 1991. ,
DOI : 10.1017/cbo9781139032636
Auto-validation d'un système de preuves avec familles inductives, Thèse de doctorat, 1999. ,
Systèmes d'exploitation : concepts et algorithmes, 1990. ,
Foundations of Constructive Mathematics, 1980. ,
DOI : 10.1007/978-3-642-68952-9
Automated complexity analysis of Nuprl extracted programs, Journal of Functional Programming, vol.11, issue.1, pp.3-31, 2001. ,
DOI : 10.1017/S0956796800003865
Pruning simply typed ?-calculi, Journal of Logic and Computation, vol.6, issue.2, 1996. ,
A Constructive Proof of Higman???s Lemma in Isabelle, Types for Proofs and Programs, 2003. ,
DOI : 10.1007/978-3-540-24849-1_5
Proofs, Programs and Executable Specifications in Higher Order Logic, 2003. ,
Extending pruning techniques to polymorphic second order ??-calculus, Proceedings ESOP'94, 1994. ,
DOI : 10.1007/3-540-57880-3_8
Using reflection to build efficient and certified decision procedures, TACS'97, 1997. ,
DOI : 10.1007/BFb0014565
Extracting a Data Flow Analyser in Constructive Logic, European Symposium on Programing, 2004. ,
URL : https://hal.archives-ouvertes.fr/inria-00564633
Implementing modules in the system Coq Modules in Type Theory with generative definitions, 16th International Conference on Theorem Proving in Higher Order Logics, 2003. ,
An analysis of Girard's paradox, Proceedings of the First Symposium on Logic in Computer Science, 1986. ,
A proof of Higman's lemma by structural induction Unpublished draft, 1993. ,
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
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
Constructive Real Analysis : a Type-Theoretical Formalization and Applications, 2004. ,
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
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
On the Definition of the Eta-long Normal Form in the Type Systems of the Cube, Informal Proceedings of the Workshop " Types, 1993. ,
Typing Soundness of ML within Coq, pp.127-144 ,
Proof theory at work : Program development in the Minlog system Automated Deduction : A Basis for Applications. Volume II, Systems and Implementation Techniques, 1998. ,
Haskell 98, A Non-strict, Purely Functional Language, 1999. ,
Preuve de programmes impératifs en théorie des types, Thèse de doctorat, 1999. ,
Why : a multi-language multi-prover verification tool, Research Report, vol.1366, 2003. ,
Functors for Proofs and Programs, European Symposium on Programing, 2004. ,
DOI : 10.1007/978-3-540-24725-8_26
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
Constructive Reals in Coq: Axioms and Categoricity, LNCS, vol.2277, pp.79-95, 2001. ,
DOI : 10.1007/3-540-45842-5_6
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
Proofs and Types. Cambridge Tracts in Theoretical Computer Science 7, 1989. ,
A compiled implementation of strong reduction, International Conference on Functional Programming 2002, pp.235-246, 2002. ,
Compilation des termes de preuves : un (nouveau) mariage entre Coq et OCaml, 2003. ,
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
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
PX, a Computational Logic, 1987. ,
An axiomatic basis for computer programming, Communications of the ACM, vol.12583, issue.10, pp.576-580, 1969. ,
The formulae-as-types notion of constructions, to H.B. Curry : Essays on Combinatory Logic, Lambda Calculus and Formalism, 1969. ,
Paulin-Mohring. The Coq Proof Assistant -A tutorial - Version 8.0, 2004. ,
Introduction to Metamathematics, 1952. ,
The Nuprl Proof Development System, Version 5, 2002. ,
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
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
The Objective Caml system ? release 3, 2003. ,
Exécution de termes de preuves : une nouvelle méthode d'extraction pour le Calcul des Constructions Inductives, 2000. ,
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. ,
Formalizing St??lmarck???s Algorithm in Coq, pp.387-404 ,
DOI : 10.1007/3-540-44659-1_24
Computation and Reasoning ; a type theory for Computer Science, International Series of Monographs in Computer Science. Oxford Science Publication, vol.11, 1994. ,
Intuitionistic Type Theory, Bibliopolis, 1984. ,
A theory of type polymorphismn programming, Journal of Computer and System Sciences, vol.17, 1978. ,
Extracting programs with exceptions in an impredicative type system, Mathematics of Program Construction, 1995. ,
DOI : 10.1007/3-540-60117-1_19
Contribution aux méthodes formelles pour le logiciel. Mémoire d'habilitationàtionà diriger des recherches, 2002. ,
Réalisation mécanisée d'interpréteurs abstraits, 1998. ,
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
Purely functional data structures, 1998. ,
DOI : 10.1017/CBO9780511530104
Synthèse de preuves de programmes dans le Calcul des Constructions Inductives . thèse d'université, 1995. ,
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
Extraction de programmes dans le Calcul des Constructions, Thèse d'université, 1989. ,
URL : https://hal.archives-ouvertes.fr/tel-00431825
Définitions Inductives en Théorie des Types d'Ordre Supérieur. HabilitationàHabilitationà diriger les recherches, 1996. ,
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
Extraction dans le calcul des constructions inductives, Journées Francophones des Langages Applicatifs, 2001. ,
Natural Deduction, A Proof-Theoretical Study, Almqvist & Wiksell, 1965. ,
Interprétation de l'analyse statique en théorie des types, 1999. ,
Constructive analysis with witnesses, Proceedings of Marktoberdorf '03 Summer School, 2003. ,
On the Constuctive Content of Proofs, 2003. ,
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
Studies of a theory of specifications with built-in program extraction, Journal of Automated Reasoning, vol.27, issue.1, 2001. ,
Calcul statique des applications de modules paramétrés, Journées Francophones des Langages Applicatifs, 2003. ,
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
Constructivism in Mathematics : an Introduction, Studies in Logic and the Foundations of Mathematics, 1988. ,
How to add laziness to a strict language, without even being odd, Workshop on Standard ML, 1998. ,
Méta-théorie du Calcul des Constructions Inductives, Thèse d'université, 1994. ,