## Moving proofs-as-programs into practice (1997)

### Cached

### Download Links

- [www.cs.uwyo.edu]
- [www.cs.uwyo.edu]
- [www.cs.cornell.edu]
- [www.nuprl.org]
- DBLP

### Other Repositories/Bibliography

Venue: | In: Proceedings of the 12 th IEEE International Conference on Automated Software Engineering, IEEE Computer Society |

Citations: | 18 - 5 self |

### BibTeX

@INPROCEEDINGS{Caldwell97movingproofs-as-programs,

author = {James L. Caldwell},

title = {Moving proofs-as-programs into practice},

booktitle = {In: Proceedings of the 12 th IEEE International Conference on Automated Software Engineering, IEEE Computer Society},

year = {1997}

}

### OpenURL

### Abstract

Proofs in the Nuprl system, an implementation of a constructive type theory, yield “correct-by-construction ” programs. In this paper a new methodology is presented for extracting efficient and readable programs from inductive proofs. The resulting extracted programs are in a form suitable for use in hierarchical verifications in that they are amenable to clean partial evaluation via extensions to the Nuprl rewrite system. The method is based on two elements: specifications written with careful use of the Nuprl set-type to restrict the extracts to strictly computational content; and on proofs that use induction tactics that generate extracts using familiar fixed-point combinators of the untyped lambda calculus. In this paper the methodology is described and its application is illustrated by example. 1.

### Citations

264 | Constructive mathematics and computer programming - Martin-Löf - 1979 |

261 |
Programming in Martin-Löf’s Type Theory: An Introduction
- Nordstrom, Petersson, et al.
- 1990
(Show Context)
Citation Context ...1. Introduction The ability to extract "correct-by-construction"programs directly from proofs is the most notable feature of constructive type theories as implemented in Nuprl [1] and relate=-=d systems [8, 2, 10]-=-. However, there still is no established software engineering practice based on the extraction of programs from constructive proofs in any of the constructive systems. A key obstacle to the transition... |

104 |
et al.: Implementing Mathematics with the Nuprl Proof Development System
- Constable
- 1986
(Show Context)
Citation Context ...illustrated by example. 1. Introduction The ability to extract "correct-by-construction"programs directly from proofs is the most notable feature of constructive type theories as implemented=-= in Nuprl [1]-=- and related systems [8, 2, 10]. However, there still is no established software engineering practice based on the extraction of programs from constructive proofs in any of the constructive systems. A... |

99 |
Edinburgh LCF: a mechanized logic of computation
- Gordon, Milner, et al.
- 1979
(Show Context)
Citation Context ...ssibly containing free variables. 2.5. The Nuprl system The Nuprl system supports construction of top-down proofs by refinement. The prover is implemented as a tactic based prover in the style of LCF =-=[3]-=- and is built on a base of ML. In Nuprl the proposition-as-types interpretation allows for presentations to be cloaked in either logical or more purely type-theoretic terms. The system supports a libr... |

53 |
Synthesis of ML programs in system Coq
- Paulin-Mohring, Werner
- 1993
(Show Context)
Citation Context ...iting Cornell University, and can be contacted at 4116 Upson Hall, Cornell University, Ithaca, NY, 14850. in an attempt to improve the efficiency, readability, and understanding of extracted programs =-=[11, 5, 12]-=-. This paper presents a methodology for specification and proof in the Nuprl system that yields clean recursive programs as extracts. The methodology for directly defining recursive functions and prov... |

45 |
The Coq proof assistant user’s guide. Rapport technique, Programme 2
- Dowek, Felty, et al.
- 1993
(Show Context)
Citation Context ...1. Introduction The ability to extract "correct-by-construction"programs directly from proofs is the most notable feature of constructive type theories as implemented in Nuprl [1] and relate=-=d systems [8, 2, 10]-=-. However, there still is no established software engineering practice based on the extraction of programs from constructive proofs in any of the constructive systems. A key obstacle to the transition... |

44 | Enhancing the Nuprl proof-development system and applying it to computational abstract algebra
- Jackson
- 1995
(Show Context)
Citation Context ...s (or abstractions), theorem objects, and ML objects. 3. Recursive Function Definitions In Nuprl In current Nuprl methodology recursive functions are directly defined by applying Curry's Y combinator =-=[5, 7]-=-. The Y combinator is defined in the Nuprl system library core 2 as follows: *A ycomb Y == f.(x.f(x x))(x.f(x x)) The methodology for effective use of definitions incorporatingsY depend on the rewriti... |

43 |
Extracting F# 's programs from proofs in the Calculus of Constructions
- Paulin-Mohring
- 1989
(Show Context)
Citation Context ...iting Cornell University, and can be contacted at 4116 Upson Hall, Cornell University, Ithaca, NY, 14850. in an attempt to improve the efficiency, readability, and understanding of extracted programs =-=[11, 5, 12]-=-. This paper presents a methodology for specification and proof in the Nuprl system that yields clean recursive programs as extracts. The methodology for directly defining recursive functions and prov... |

13 |
Algorithm development in the Calculus of Constructions
- Mohring
- 1986
(Show Context)
Citation Context ...antifier to the set type and choose to project the first element of the pair. The problem of extracting clear programs from proofs in the Calculus of Constructions has been addressed by PaulinMohring =-=[9, 11]. The approach separ-=-ates "computationally informative" and "non-informative" propositions by syntactic means. This provides a means of eliminating the parts of the program corresponding to the logical... |

12 | Reasoning about functional programs in Nuprl
- Howe
(Show Context)
Citation Context ...iting Cornell University, and can be contacted at 4116 Upson Hall, Cornell University, Ithaca, NY, 14850. in an attempt to improve the efficiency, readability, and understanding of extracted programs =-=[11, 5, 12]-=-. This paper presents a methodology for specification and proof in the Nuprl system that yields clean recursive programs as extracts. The methodology for directly defining recursive functions and prov... |

9 |
PX: A Computational Logic. Foundations of Computing
- SusumuHayashi, Nakano
- 1988
(Show Context)
Citation Context ...ng the parts of the program corresponding to the logical specification. A similar idea of separating non-computational content from computationally interesting content is implemented in the system PX =-=[4]-=-. But neither system can define functions by ordinary recursion and neither provides a means for proving new induction principles as we have above. 6. Conclusions and Future Work The work reported on ... |

9 | Extracting F!'s programs from proofs in the Calculus of Constructions - Paulin-Mohring - 1989 |

8 |
Constructive mathematics and computer programming
- of
- 1982
(Show Context)
Citation Context ...1. Introduction The ability to extract "correct-by-construction"programs directly from proofs is the most notable feature of constructive type theories as implemented in Nuprl [1] and relate=-=d systems [8, 2, 10]-=-. However, there still is no established software engineering practice based on the extraction of programs from constructive proofs in any of the constructive systems. A key obstacle to the transition... |

4 |
The Nuprl proof developemnt system, version 4.2 reference manual and user’s guide
- Jackson
- 1995
(Show Context)
Citation Context ...e typing, well-formedness goals are not generated when the conversion to unfold Y is applied and one is never required to assign a type to Y itself. Tactic support for the methodology is described in =-=[6, 7]-=- In this paper, and in Nuprl libraries developed by the author, the Y combinator is hidden by the more familiar letrec form. It is defined as follows: (letrec fsx = b[f;x]) == Y(f.(sx.b[f;sx])) The co... |