"Propositions as Types" by Philip Wadler
Strange Loop Conference9 HN recommenders · 2015–2026
143K views · talk · evergreen · Uploaded 2015-09-26
Philip Wadler's Strange Loop talk on Propositions as Types, the link between logic and computation (the Curry-Howard correspondence). He traces its history through Church, Godel and Turing and shows how it shaped theorem provers and programming languages.
HN regards it as an entertaining and eye-opening introduction to why logic and functional programming are connected, and it is a frequent pick in favorite-tech-talk threads.
53:22Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich
Confreaks
49:55How Python was Shaped by leaky Internals, Armin Ronacher, Flask framework
Видео с мероприятий {speach!
46:09Why Isn't Functional Programming the Norm? – Richard Feldman
Metosin
1:03:29Maybe Not - Rich Hickey
ClojureTV
7:48Conway's Game Of Life in APL
Dyalog
1:12:56Lecture 1A | MIT 6.001 Structure and Interpretation, 1986
MIT OpenCourseWare
1:42:09Crockford on JavaScript - Volume 1: The Early Years
YUI Library
53:31Growing a Language, by Guy Steele
Bill Pugh
20 comments from Hacker News
If you're finding the paper too dense, Philip gave a extremely entertaining talk on the same subject at Strange Loop this year: [VIDEO]
+1 Probably my favorite talk at Strange Loop this year. It's worth watching just for the minute or so starting here: [VIDEO]
If you’re using the right language, proofs are programs; it’s as simple as that. “Compressing” a proof, then, amounts to doing what good programmers are already doing — noticing patterns and eliminating redundancy. I’ll refer you to an authority on the subject, Phil Wadler. If you like watching videos, try < [VIDEO] . If you’d rather read an entertaining paper, try < [LINK] .
Propositions as Types: [VIDEO] I think this can really really change how we look at everyday programming tasks everywhere from the type of tooling we choose to how we approach problems.
The lambda calculus teaches you how to build computation from a very simple evaluation rule called "beta reduction" which is just a fancy name for "search and replace" with function parameters. If you can find a system that can rewrite terms in such a fashion, you can compute whatever you want using the tricks you learn in lambda calculus. For example, C++ templates were not meant to be Turing-complete, but they work by rewriting terms [1], so you can encode lambda calculus in it, and run arbitrary programs at compile time . Philip Wadler does a better job than me at getting excited by lambda calculus. He calls it "the omniversal programming language", and claims that aliens will probably have discovered it [2]. [1]: [LINK] [2]: [VIDEO]
curry-howard and Wadler's "Propositions as Types" talk at StrangeLoop* opened my eyes pretty early on to the sweet, sweet utility of logic in my every day programming. it sounds odd to start with but I never realized why these things mattered prior to viewing this talk. props to wadler. best ~40 minutes I've ever spent. * [VIDEO]
Came here to mention MyPy and optional typing, the preferable term Gradual Typing means something distinctly different. [LINK] Dropbox employs the creator of MyPy but it isn't a creation of dropbox. Type Systems as Macros [LINK] Pluggable Type Systems [LINK] Propositions as Types [LINK] [VIDEO]
Philip Wadler's 'Propositions as Types': [VIDEO] Bonus: that was the talk that introduced Lambdaman to the world.
Professor Philip Wadler has a fantastic talk titled "Propositions as Types" that introduces the Curry-Howard correspondence, some history behind it and ideas following it. In fact it's one of my favorite talks. Well worth a watch if you haven't seen it: [VIDEO]
I know it seems like one of those Lispers' idiosyncrasies--"discovered" instead of "invented". I first heard it explained by Philip Wadler, and upon reflection it was one of those "enlightenment" moments that Lispers always go on about: Lambda calculus is a discovery, and should we ever encounter an alien space-faring species, we could read their programs in spite of their alien processing architectures (given that they use a functional language, but let's face it, they have the tech to cross space, they know what they are doing, i.e. they're in the functional camp) "Propositions as Types" by Philip Wadler, Strange Loop. ( [VIDEO] )
Propositions as Types by Philip Wadler A really in depth look into why functional languages stand out as a programming paradigm. The short of it being that they parallel perfectly (almost proof for proof!) with mathematical logic. [VIDEO]
Proof assistants are like that. Check out Coq or Agda. If you aren't aware of it already, your spirit is calling for the stuff they talk about a lot in the functional programming community. See [VIDEO] for example. Maybe not the best video or intro to the themes though. Wadler also just put out a book about programming language foundations in Agda - [LINK] . [LINK] being one of the profound ideas here.
Philip Wadler showcases and comments on some of this history in his conference talk "Propositions as Types" [VIDEO]
My favorite is Philip Wadler - during a Strange Loop talk[0], all of a sudden he tore his shirt, showing his "lambda man" suit underneath. [0] [VIDEO]
notoriously Philip Wadler says that computer science has two problems: computer and science. It's not about computers and "You don't put science on your name if you're a real science" He prefers the name informatics. source: [VIDEO]
A semi related video about the relationship between mathematics and computer science [VIDEO] "Propositions as Types" by Philip Wadler
You might wish to have a look at "Propositions as Types" by Philip Wadler (thanks rbonvall, for the link!) -- at 21:30 (1290 seconds) into the video: [VIDEO] " Evaluation corresponds exactly to simplification of proofs ..." (The rest of the video, both before and after this statement, contain more context...) That being said, I agree with you that languages which are used primarily for theorem proving (AKA, "proof assistants") -- are usually not as applicable to as broad a range of programming paradigms and problems as most general purpose computer programming languages are...
A little bit of historical background. There was a concerted effort in the late 19th, early 20th century (perhaps earlier too) to mechanise computation i.e., reducing it to a pure symbolic manipulation. There were obvious benefits, a famous one being Enigma Machine that was used to (successfully I think) break the German code during WW-2. On the philosophical side a parallel and overlapping effort was going on to figure out using mathematics to represent all possible truths , again as symbolic manipulation system. Bertrand Russel's magnum opus Principia Mathematica [1] was one such famous work towards it. Kurt Gödel then made a breakthrough when he proved that such a system is impossible; i.e., a system can either capture all the truths or it can be consistent but not both[2]. Put differently, any mathematical system capable of representing all the truths will necessarily contain contradictions within it. Now coming to your question. Lambda calculus emerged in this milieu. Alonzo Church[3] invented one such system to mechanise computation, named ƛ-calculus. Using this system one can mechanically compute any function purely through symbolic manipulation. Later on Turing, Church's student I think, invented a totally different system named Turing Machine with the same purpose. Later on it was proved (by Church and Turing I think, but I'm not 100% sure) that ƛ-Calculus and Turing Machine are equivalent, Church-Turing thesis[4]. All these work, and more, laid the theoretical found
This is nice and genuinely entertaining [VIDEO] (Propositions as types by phil wadler). Its true focus is the 1-1 mapping between type systems and logic systems, but it's well worth the watch. This is good reading - it demystifies the funny typing rules in their mathematical form. [LINK] (Neither of these tell you how to implement the checker yourself though)
That's any programming language, really [1]. Any website contains millions of "proofs", not all of them are useful. Choosing what needs to be proven is hard. And the spectrum of languages/type systems and their usability as either is more explored nowadays than it used to be. If you don't likue coq, you can look for agda. If agda is too far for you, you can look for Haskell. If that's still impractical, there's rust or f#, etc... The tradeoff you have between "convenient for expressing proofs" and "convenient for programming" has many options. [1]: [VIDEO]