244 research outputs found
Proofs are Programs: 19th Century Logic and 21st Century Computing
As the 19th century drew to a close, logicians formalized an ideal notion of proof. They were driven by nothing other than an abiding interest in truth, and their proofs were as ethereal as the mind of God. Yet within decades these mathematical abstractions were realized by the hand of man, in the digital stored-program computer. How it came to be recognized that proofs and programs are the same thing is a story that spans a century, a chase with as many twists and turns as a thriller. At the end of the story
is a new principle for designing programming languages that will guide computers into the 21st century.
For my money, Gentzen’s natural deduction and Church’s lambda calculus are on a par with Einstein’s relativity and Dirac’s quantum physics for elegance and insight. And the maths are a lot simpler. I want to show you the essence of these ideas. I’ll need a few symbols, but not too many, and I’ll explain as I go along.
To simplify, I’ll present the story as we understand it now, with some asides to fill in the history. First, I’ll introduce Gentzen’s natural deduction, a formalism for proofs. Next, I’ll introduce Church’s lambda calculus, a formalism for programs. Then I’ll explain why proofs and programs are really the same thing, and how simplifying a proof corresponds to executing a program. Finally, I’ll conclude with a look at how these principles are being applied to design a new generation of programming languages, particularly mobile code for the Internet
You and Your Research and the Elements of Style
This talk surveys advice from experts, including Richard Hamming, William Strunk, E. B. White, Donald Knuth, and others, on how to conduct your research and communicate your results
Comprehending monads
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can concisely express in a pure functional language some programs that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old problem of destructive array update is also presented. No knowledge of category theory is assumed
Abstract Data Types without the Types. Dedicated to David Turner on the occasion of his 70'th birthday
The data abstraction mechanism of Miranda may be adapted to a dynamically typed programming language by applying ideas from gradual typing
A second look at overloading
We study a minimal extension of the Hindley/Milner system that
supports overloading and polymorphic records. We show that the type
system is sound with respect to a standard untyped compositional
semantics. We also show that every typable term in this system has a
principal type and give an algorithm to reconstruct that type
A second look at overloading
We study a minimal extension of the Hindley/Milner system that
supports overloading and polymorphic records. We show that the type
system is sound with respect to a standard untyped compositional
semantics. We also show that every typable term in this system has a
principal type and give an algorithm to reconstruct that type
- …