Abstract
Dependent type theory has several practical applications in the fields of theorem proving, program verification and programming language design. Ivor is a Haskell library designed to allow easy extending and embedding of a type theory based theorem prover in a Haskell application. In this paper, I give an overview of the library and show how it can be used to embed theorem proving technology in an implementation of a simple functional programming language; by using type theory as a core representation, we can construct and evaluate terms and prove correctness properties of those terms within the same framework, ensuring consistency of the implementation and the theorem prover.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
Cover translator. http://coverproject.org/CoverTranslator/
Barras, B., Werner, B.: Coq in Coq (1997)
Brady, E.: Practical Implementation of a Dependently Typed Functional Programming Language. PhD thesis, University of Durham (2005)
Brady, E., Hammond, K.: A dependently typed framework for static analysis of program execution costs. In: Butterfield, A., Grelck, C., Huch, F. (eds.) IFL 2005. LNCS, vol. 4015, pp. 74–90. Springer, Heidelberg (2006)
Brady, E., Hammond, K.: A verified staged interpreter is a verified compiler. In: Proc. Conf. Generative Programming and Component Engineering (GPCE 2006) (2006)
Chapman, J., Altenkirch, T., McBride, C.: Epigram reloaded: A standalone typechecker for ETT. In: Trends in Functional Programming, 2005 (to appear)
Coq Development Team. The Coq proof assistant — reference manual (2001), http://coq.inria.fr/
Coquand, C.: Agda (2005), http://agda.sourceforge.net/
Coquand, T.: Pattern matching with dependent types (1992), Available from http://www.cs.chalmers.se/~coquand/type.html
Curry, H.B., Feys, R.: Combinatory Logic, vol. 1. North Holland, Amsterdam (1958)
de Mol, M., van Eekelen, M., Plasmeijer, R.: Theorem proving for functional programmers. In: Arts, T., Mohnen, M. (eds.) IFL 2002. LNCS, vol. 2312, Springer, Heidelberg (2002)
Dybjer, P.: Inductive families. Formal Aspects Of Computing 6, 440–465 (1994)
Filliâtre, J.-C.: Why: a multi-language multi-prover verification tool. Research Report 1366, LRI, Université Paris Sud (March 2003)
Geuvers, H., Wiedijk, F., Zwanenburg, J.: A constructive proof of the fundamental theorem of algebra without using the rationals. In: TYPES 2000, pp. 96–111 (2000)
Giménez, E.: An application of co-inductive types in coq: Verification of the alternating bit protocol. In: Berardi, S., Coppo, M. (eds.) TYPES 1995. LNCS, vol. 1158, pp. 135–152. Springer, Heidelberg (1996)
Gonthier, G.: A computer-checked proof of the Four Colour Theorem (2005), http://research.microsoft.com/~gonthier/4colproof.pdf
Hammond, K., Michaelson, G.: Hume: a Domain-Specific Language for Real-Time Embedded Systems. In: Pfenning, F., Smaragdakis, Y. (eds.) GPCE 2003. LNCS, vol. 2830, Springer, Heidelberg (2003)
Howard, W.A.: The formulae-as-types notion of construction, A reprint of an unpublished manuscript from 1969. In: Seldin, J.P., Hindley, J.R. (eds.) To H.B.Curry: Essays on combinatory logic, lambda calculus and formalism, Academic Press, San Diego (1980)
Hudak, P.: Building domain-specific embedded languages. ACM Computing Surveys, 28A(4) (December 1996)
Leroy, X.: Formal certification of a compiler back-end. In: Principles of Programming Languages 2006, pp. 42–54. ACM Press, New York (2006)
Letouzey, P.: A new extraction for Coq. In: Geuvers, H., Wiedijk, F. (eds.) Types for proofs and programs. LNCS, Springer, Heidelberg (2002)
Luo, Z.: Computation and Reasoning – A Type Theory for Computer Science. Intl. Series of Monographs on Comp. Sci. OUP (1994)
Luo, Z., Pollack, R.: Lego proof development system: User’s manual. Technical report, Department of Computer Science, University of Edinburgh (1992)
McBride, C.: Dependently Typed Functional Programs and their proofs. PhD thesis, University of Edinburgh (May 2000)
McBride, C., Goguen, H., McKinna, J.: Some constructions on constructors. In: Filliâtre, J.-C., Paulin-Mohring, C., Werner, B. (eds.) TYPES 2004. LNCS, vol. 3839, Springer, Heidelberg (2006)
McBride, C., McKinna, J.: I am not a number, I am a free variable. In: Proceedings of the ACM SIGPLAN Haskell Workshop (2004)
McBride, C., McKinna, J.: The view from the left. Journal of Functional Programming 14(1), 69–111 (2004)
McKinna, J., Wright, J.: A type-correct, stack-safe, provably correct, expression compiler in Epigram. Journal of Functional Programming (to appear, 2007)
Milner, R.: LCF: A way of doing proofs with a machine. In: Winkowski, J. (ed.) Mathematical Foundations of Computer Science 1978. LNCS, vol. 64, pp. 146–159. Springer, Heidelberg (1978)
Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL - A proof assistant for higher order logic. In: Nipkow, T., Paulson, L.C., Wenzel, M. (eds.) Isabelle/HOL. LNCS, vol. 2283, Springer, Heidelberg (2002)
Jones, S.P., Vytiniotis, D., Weirich, S., Washburn, G.: Simple unification-based type inference for GADTs. In: Proc. 2006 International Conf. on Functional Programming (ICFP 2006) (2006)
Plasmeijer, R., van Eekelen, M.: The Concurrent CLEAN language report (draft) (2003), Available from http://www.cs.kun.nl/~clean/
Pollack, R.: Implicit syntax. Informal Proceedings of First Workshop on Logical Frameworks, Antibes (May 1990)
Pugh, W.: The Omega Test: a fast and practical integer programming algorithm for dependence analysis. Communication of the ACM, pp. 102–114 (1992)
Sheard, T.: Languages of the future. In: ACM Conference on Object Orientated Programming Systems, Languages and Applicatioons (OOPSLA 2004) (2004)
Taha, W.: A gentle introduction to multi-stage programming (2003), Available from http://www.cs.rice.edu/~taha/publications/journal/dspg04a.pdf
Author information
Authors and Affiliations
Editor information
Rights and permissions
Copyright information
© 2007 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Brady, E. (2007). Ivor, a Proof Engine. In: Horváth, Z., Zsók, V., Butterfield, A. (eds) Implementation and Application of Functional Languages. IFL 2006. Lecture Notes in Computer Science, vol 4449. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-74130-5_9
Download citation
DOI: https://doi.org/10.1007/978-3-540-74130-5_9
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-74129-9
Online ISBN: 978-3-540-74130-5
eBook Packages: Computer ScienceComputer Science (R0)