-
Notifications
You must be signed in to change notification settings - Fork 15
Types and Programming Languages Chapter 8 Typed Arithmetic Expressions
As mentioned in the introduction of the book, we wish to check the run-time behaviour of a program without evaluating it in order to quickly spot potential bad behaviours. By introducing types into our language, we can express rules about those types (not entirely dissimilar to the evaluation rules we've seen in previous chapters) and check them statically before evaluating a program.
If we can prove that every well-typed term is either a value or can be evaluated a single step ("progress") and that evaluating a well-typed term also results in a well-typed term ("preservation") then we can confident that our program will not get stuck ("safety").
@mudge takes a knee (prodigious amounts of hummus not pictured).
@mrageh gives an example of a badly-typed expression and leads a discussion of programs that will evaluate but won't type check (Simon Peyton-Jones' "The Region of Abysmal Pain").
@urbanautomaton takes to the board.
@urbanautomaton consults the book.
@jcoglan takes to the board.
@leocassarani discusses adding more typing rules to handle edge cases.
@tomstuart takes to the board.
@tomstuart discusses progress and preservation.
@tomstuart discusses safety.
@leocassarani works through the derivation of a well-typed term.
@leocassarani works through the derivation of a badly typed term.
@tomstuart talks about the stronger claim of preservation with our arithmetic language.
The final state of the whiteboard.
A little trolling.
Innovative new ways of moving circular tables are discovered by @tuzz and @jcoglan.
Cheersy cheers!
Thanks to Leo and Geckoboard for hosting, to all those who contributed snacks and to Abeer for organising the meeting (and last week's Computation Pub).
- Home
- Documentation
- Choosing a Topic
- Shows & Tells
- Miscellaneous
- Opt Art
- Reinforcement Learning: An Introduction
- 10 Technical Papers Every Programmer Should Read (At Least Twice)
- 7 More Languages in 7 Weeks
- Lua, Day 1: The Call to Adventure
- Lua, Day 2: Tables All the Way Down
- Lua, Day 3
- Factor, Day 1: Stack On, Stack Off
- Factor, Day 2: Painting the Fence
- Factor, Day 3: Balancing on a Boat
- Elm, Day 1: Handling the Basics
- Elm, Day 2: The Elm Architecture
- Elm, Day 3: The Elm Architecture
- Elixir, Day 1: Laying a Great Foundation
- Elixir, Day 2: Controlling Mutations
- Elixir, Day 3: Spawning and Respawning
- Julia, Day 1: Resistance Is Futile
- Julia, Day 2: Getting Assimilated
- Julia, Day 3: Become One With Julia
- Minikanren, Days 1-3
- Minikanren, Einstein's Puzzle
- Idris Days 1-2
- Types and Programming Languages
- Chapter 1: Introduction
- Chapter 2: Mathematical Preliminaries
- Chapter 3: Untyped Arithmetic Expressions
- Chapter 4: An ML Implementation of Arithmetic Expressions
- Chapter 5: The Untyped Lambda-Calculus
- Chapters 6 & 7: De Bruijn Indices and an ML Implementation of the Lambda-Calculus
- Chapter 8: Typed Arithmetic Expressions
- Chapter 9: The Simply-Typed Lambda Calculus
- Chapter 10: An ML Implementation of Simple Types
- Chapter 11: Simple Extensions
- Chapter 11 Redux: Simple Extensions
- Chapter 13: References
- Chapter 14: Exceptions
- Chapter 15: Subtyping – Part 1
- Chapter 15: Subtyping – Part 2
- Chapter 16: The Metatheory of Subtyping
- Chapter 16: Implementation
- Chapter 18: Case Study: Imperative Objects
- Chapter 19: Case Study: Featherweight Java
- The New Turing Omnibus
- Errata
- Chapter 11: Search Trees
- Chapter 8: Random Numbers
- Chapter 35: Sequential Sorting
- Chapter 58: Predicate Calculus
- Chapter 27: Perceptrons
- Chapter 9: Mathematical Research
- Chapter 16: Genetic Algorithms
- Chapter 37: Public Key Cryptography
- Chapter 6: Game Trees
- Chapter 5: Gödel's Theorem
- Chapter 34: Satisfiability (also featuring: Sentient)
- Chapter 44: Cellular Automata
- Chapter 47: Storing Images
- Chapter 12: Error-Correcting Codes
- Chapter 32: The Fast Fourier Transform
- Chapter 36: Neural Networks That Learn
- Chapter 41: NP-Completeness
- Chapter 55: Iteration and Recursion
- Chapter 19: Computer Vision
- Chapter 61: Searching Strings
- Chapter 66: Church's Thesis
- Chapter 52: Text Compression
- Chapter 22: Minimum spanning tree
- Chapter 64: Logic Programming
- Chapter 60: Computer Viruses
- Show & Tell
- Elements of Computing Systems
- Archived pages