an introduction to type theory

An Introduction to Type Theory Part 3 Tallinn, September 2003 with - PowerPoint PPT Presentation

An Introduction to Type Theory Part 3 Tallinn, September 2003 with cartoons by Conor McBride http://www.cs.nott.ac.uk/txa/tallinn/ Thorsten Altenkirch University of Nottingham An Introduction to Type Theory p.1/32 The established


  1. οΏ½ ✁ βœ„ ✑ ☞ ✌ ✍ οΏ½ ✁ βœ‚ οΏ½ βœ‚ ✁ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† ✑ ☞ ✌ ✍ ✞ οΏ½ βœ‚ βœ‚ βœ† βœ„ ✝ ✁ βœ‚ ✑ ✁ β˜› βœ„ ✁ οΏ½ ✁ βœ‚ βœ† ✑ βœ„ βœ‚ οΏ½ β€” no dependent types ✞✠✟ let Hindley-Milner: Type quantification and application can be made implicit. Split left hand sides using type information An Introduction to Type Theory – p.6/32

  2. οΏ½ βœ‚ ✁ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† οΏ½ ☞ ✌ ✍ οΏ½ ✁ οΏ½ ✁ ✁ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† οΏ½ ✟ ✑ βœ† ☞ ✌ ✍ οΏ½ βœ‚ ✁ βœ‚ βœ† βœ„ ✝ ✁ βœ‚ ✑ βœ„ β˜› βœ‚ ✁ οΏ½ ✁ οΏ½ βœ† ✞ ✍ ✌ ☞ ✑ βœ„ ✑ οΏ½ βœ‚ ✁ οΏ½ βœ‚ βœ„ β€” no dependent types ✞✠✟ let Hindley-Milner: Type quantification and application can be made implicit. Split left hand sides using type information An Introduction to Type Theory – p.6/32

  3. οΏ½ βœ‚ ✁ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† οΏ½ ☞ ✌ βœ„ οΏ½ ✁ οΏ½ ✁ ✁ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† οΏ½ ✟ ✑ βœ† ☞ ✌ ✍ οΏ½ βœ‚ ✁ βœ‚ βœ† βœ„ ✝ ✁ βœ‚ ✑ βœ„ β˜› βœ‚ ✁ οΏ½ ✁ οΏ½ βœ† ✞ ✍ ✌ ☞ ✑ βœ„ ✑ οΏ½ βœ‚ ✁ οΏ½ βœ‚ βœ„ β€” no dependent types ✞✠✟ let Hindley-Milner: Type quantification and application can be made implicit. Split left hand sides using type information An Introduction to Type Theory – p.6/32

  4. οΏ½ ✌ ✁ οΏ½ βœ‚ ✁ οΏ½ βœ„ ☞ οΏ½ οΏ½ βœ† βœ„β˜Ž βœ„ ✟ οΏ½ βœ‚ ✟ ✁ ✌ ✑ ☎ βœ„ βœ‚ ✁ οΏ½ ☞ βœ„ βœ† ✑ ✟ οΏ½ βœ† βœ„β˜Ž ✁ βœ‚ οΏ½ βœ† βœ† βœ„ ✝ ✁ βœ‚ ✑ βœ„ β˜› βœ‚ ✁ οΏ½ βœ‚ βœ‚ ✁ ✑ ✑ ✁ οΏ½ ✍ βœ„ ☞ ✌ βœ„ ✞ οΏ½ βœ‚ ✁ οΏ½ βœ‚ β€” no dependent types ✞✠✟ let Hindley-Milner: Type quantification and application can be made implicit. Split left hand sides using type information An Introduction to Type Theory – p.6/32

  5. οΏ½ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ† οΏ½ ☞ ✌ βœ„ οΏ½ ✁ βœ‚ οΏ½ ✁ οΏ½ ✁ ☞ ✑ βœ„β˜Ž βœ‚ ✁ οΏ½ ✌ βœ† ✟ ✑ ✟ οΏ½ βœ† βœ„β˜Ž βœ„ βœ‚ οΏ½ ✁ βœ‚ βœ† βœ„ ✝ ✁ βœ‚ ✑ βœ„ β˜› βœ‚ ✁ οΏ½ ✁ βœ‚ βœ† ✑ βœ„ ✁ οΏ½ ✍ ✌ ☞ ✑ βœ„ ✞ οΏ½ βœ‚ ✁ οΏ½ βœ‚ is not good ✞✠✟ let An Introduction to Type Theory – p.7/32

  6. οΏ½ βœ‚ ✟ οΏ½ βœ† βœ„β˜Ž βœ„ ✟ οΏ½ ✁ βœ† οΏ½ βœ‚ ✁ οΏ½ βœ„ ✌ ☞ ✑ ☞ ✁ ✁ βœ† ☎ βœ„ βœ‚ ✁ οΏ½ βœ‚ οΏ½ ✌ βœ‚ ✁ οΏ½ ✑ βœ„β˜Ž βœ‚ ✁ οΏ½ οΏ½ βœ† βœ„β˜Ž βœ‚ βœ„ βœ† βœ‚ ✁ οΏ½ ✁ β˜› βœ‚ βœ„ ✑ βœ‚ ✁ ✝ βœ„ βœ† βœ„ ✑ οΏ½ οΏ½ ✟ οΏ½ βœ‚ ✁ οΏ½ βœ‚ ✁ ✁ ✍ ✌ ☞ ✑ βœ„ ✞ οΏ½ βœ‚ is not good ✞✠✟ let The function is partial leads to a runtime error. An Introduction to Type Theory – p.7/32

  7. οΏ½ ✟ βœ† ✑ ✟ οΏ½ βœ† βœ„β˜Ž βœ„ οΏ½ ✌ βœ‚ ✁ οΏ½ βœ‚ ✁ οΏ½ βœ„ ✁ ☞ οΏ½ οΏ½ οΏ½ βœ‚ ✁ οΏ½ βœ† ☎ βœ„ βœ‚ ✁ βœ‚ ✁ ✁ οΏ½ βœ‚ ✁ οΏ½ ✑ βœ„β˜Ž βœ‚ ☞ ✌ βœ† βœ‚ βœ„ βœ„β˜Ž βœ† βœ‚ ✁ οΏ½ ✁ β˜› οΏ½ βœ„ ✑ βœ‚ ✁ ✝ βœ„ βœ† βœ‚ ✑ ✁ οΏ½ βœ„ ✟ οΏ½ βœ‚ ✁ οΏ½ βœ‚ ✁ βœ‚ ✍ ✌ ☞ ✑ βœ„ ✞ οΏ½ is not good ✞✠✟ let The function is partial leads to a runtime error. Reason: The type of is not informative enough. An Introduction to Type Theory – p.7/32

  8. An Introduction to Type Theory – p.8/32 βœ‚ βœ‚ βœ„ βœ„ ☎ βœ„ βœ‚ ✁ ☎ ✟ ✞ ✝ βœ„ οΏ½ βœ„ βœ„ βœ„ οΏ½ οΏ½ βœ‚ ✁ ✝ βœ„ βœ„β˜Ž βœ„ ✟ ✝ οΏ½ βœ‚ ✁ βœ‚ ✁ ✟ ✞ ✞ ☎ ✟ βœ„ βœ„ ☎ οΏ½ βœ„ β˜› βœ‚ ✁ ✑ βœ„ β˜› βœ‚ ✁ βœ„ ✑ β˜› βœ‚ βœ‚ ✁ βœ‚ βœ„ ☎ ✝ β˜› ✁ βœ‚ βœ„ ☎ βœ‚ ✁ ✞✠✟ where data types where ✞✠✟ data data

  9. An Introduction to Type Theory – p.8/32 βœ„ ✞ βœ„ βœ„ ✝ ✞ ✟ ✁ βœ‚ βœ„ βœ„ βœ‚ βœ„ ☎ ✝ ☎ ✞ ✟ ✁ βœ‚ ✁ βœ‚ οΏ½ ✟ βœ„ βœ„β˜Ž βœ„ ✝ ✁ βœ‚ οΏ½ βœ„ βœ‚ ✟ βœ„ ☎ οΏ½ βœ„ β˜› βœ‚ ✁ ✑ βœ„ β˜› βœ‚ ✁ ✑ βœ‚ βœ„ β˜› βœ‚ ✁ βœ‚ βœ„ ☎ ✝ β˜› ✁ ✁ ✞✠✟ where data types where ✞✠✟ data data

  10. ✁ οΏ½ Better data types, better An Introduction to Type Theory – p.9/32

  11. βœ“ ✝ οΏ½ ✜ οΏ½ βœ” οΏ½ ✁ βœ› βœ„ ✁ ✝ βœ‚ ✝ βœ› οΏ½ ✜ β˜› βœ† ✝ ✁ βœ› βœ‚ ✝ βœ› ✁ βœ” οΏ½ ✁ οΏ½ βœ„ ✜ βœ‚ ✝ οΏ½ ✁ ✁ βœ„ οΏ½ ✁ βœ“ βœ„ ☎ β˜› βœ† βœ‚ Better data types, better β˜žβœ‚βœ β˜žβœ‚βœ β˜žβœ‚βœ data where An Introduction to Type Theory – p.9/32

  12. An Introduction to Type Theory – p.9/32 ✌ ✠ βœ„ ✁ οΏ½ ☎ οΏ½ βœ™ βœ‘ ✁ ✁ ✝ οΏ½ βœ› βœ‚ βœ„ ✁ οΏ½ οΏ½ βœ™ βœ‘ ✁ βœ„ ✁ ✁ ✠ βœ„ οΏ½ ✠ βœ” οΏ½ ✜ βœ“ οΏ½ βœ™ βœ‘ ✁ ✁ βœ„ ✠ ✁ βœ† ✜ βœ› βœ’ βœ™ βœ‚ οΏ½ οΏ½ βœ™ βœ‘ ✁ οΏ½ βœ„ ✁ βœ„ οΏ½ ✜ βœ“ βœ› ✝ βœ‚ ✁ βœ† β˜› ☎ ✁ οΏ½ οΏ½ βœ„ ✁ οΏ½ βœ› ✝ βœ‚ βœ„ ✁ οΏ½ ✁ οΏ½ βœ” ✁ β˜› βœ› ✝ βœ‚ ✁ ✝ οΏ½ βœ† ✜ ✜ οΏ½ βœ› ✝ βœ‚ ✁ ✝ βœ„ βœ” βœ“ Better data types, better β˜žβœ‚βœ β˜žβœ‚βœ β˜žβœ‚βœ where where β˜žβœ‚βœ β˜žβœ‚βœ data data

  13. οΏ½ οΏ½ ✁ ✌ ✝ βœ› βœ‚ βœ„ ✁ οΏ½ βœ™ βœ‘ βœ‘ ✁ βœ‘ βœ„ βœ™ ✁ οΏ½ βœ„ ✁ ✁ βœ™ οΏ½ οΏ½ βœ„ ✠ ✠ ✜ βœ› βœ’ βœ™ βœ‚ οΏ½ οΏ½ βœ™ βœ‘ ✁ ✁ ✠ βœ„ οΏ½ ✁ ✠ ☎ οΏ½ βœ” ✁ οΏ½ β˜› ☎ βœ„ βœ“ ✁ οΏ½ βœ„ ✁ βœ› βœ‚ ✝ βœ‚ ✜ βœ„ οΏ½ ✁ οΏ½ βœ” ✁ ✁ ✝ οΏ½ ✜ ✜ βœ“ βœ› ✝ βœ‚ ✁ ✝ β˜› οΏ½ βœ› βœ› ✝ βœ‚ ✁ ✝ βœ” οΏ½ ✜ βœ“ ✁ Better data types, better β˜žβœ‚βœ β˜žβœ‚βœ data where β˜žβœ‚βœ data where An Introduction to Type Theory – p.9/32

  14. An Introduction to Type Theory – p.9/32 βœ™ ✁ ✁ βœ„ ✠ ✠ ✜ βœ› βœ’ βœ™ βœ‚ οΏ½ οΏ½ βœ‘ βœ™ ✁ ✁ ✠ βœ„ οΏ½ ✁ ✠ ☎ οΏ½ βœ™ βœ‘ ✁ ✁ ✌ βœ‘ οΏ½ οΏ½ ✁ οΏ½ ✁ ✝ οΏ½ βœ† ✁ βœ„ βœ› οΏ½ βœ› ✝ βœ‚ ✝ βœ“ οΏ½ οΏ½ βœ™ βœ‘ ✁ ✁ οΏ½ βœ„ ✁ οΏ½ βœ” οΏ½ ✜ ✝ βœ› βœ‚ ☎ βœ„ ✝ βœ” οΏ½ ✜ βœ“ βœ› ✝ βœ‚ ✁ β˜› βœ„ ✝ ✁ οΏ½ βœ„ ✁ οΏ½ βœ› ✝ βœ‚ βœ„ ✁ οΏ½ ✁ βœ‚ ✁ βœ› οΏ½ ✁ οΏ½ οΏ½ βœ™ βœ‘ ✁ βœ„ ✁ οΏ½ βœ„ οΏ½ ✁ βœ” ✝ οΏ½ ✜ ✜ β˜› βœ“ βœ› ✝ ✁ βœ‚ Better data types, better β˜žβœ‚βœ β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  15. An Introduction to Type Theory – p.9/32 ✁ ✠ ✠ ✜ βœ› βœ’ βœ™ βœ‚ οΏ½ οΏ½ βœ™ βœ‘ ✁ ✠ βœ„ ✁ οΏ½ ✁ ✠ ☎ οΏ½ βœ™ βœ‘ ✁ ✁ ✌ ✝ βœ› βœ„ ✁ βœ„ ✝ οΏ½ ✁ ✝ οΏ½ ✁ βœ„ βœ› οΏ½ βœ› ✝ βœ‚ ✁ οΏ½ βœ‘ οΏ½ βœ™ βœ‘ ✁ ✁ οΏ½ βœ” οΏ½ ✜ βœ“ οΏ½ βœ™ βœ‚ ✁ οΏ½ βœ„ ✝ βœ” οΏ½ ✜ βœ“ βœ› ✝ βœ‚ ✁ β˜› ☎ ✁ βœ‚ οΏ½ βœ„ ✁ οΏ½ βœ› ✝ βœ‚ βœ„ ✁ οΏ½ ✁ οΏ½ ✁ ✝ οΏ½ βœ‘ ✁ οΏ½ βœ„ ✁ οΏ½ βœ› βœ™ βœ” ✜ ✁ οΏ½ βœ“ βœ› ✝ βœ‚ ✁ ✝ β˜› ✜ οΏ½ βœ„ Better data types, better β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  16. An Introduction to Type Theory – p.9/32 οΏ½ οΏ½ βœ™ βœ‘ ✁ ✁ βœ„ ✠ ✠ ✜ βœ› βœ’ βœ™ βœ‚ οΏ½ ✜ βœ™ βœ‘ ✁ ✁ ✠ βœ„ οΏ½ ✁ ✠ ☎ οΏ½ βœ™ βœ‘ ✁ βœ“ οΏ½ ✌ βœ„ βœ‚ ✁ οΏ½ οΏ½ οΏ½ ✁ βœ„ βœ› οΏ½ ✁ ✝ οΏ½ ✁ βœ› βœ” οΏ½ βœ› ✝ βœ‚ ✁ ✝ οΏ½ οΏ½ βœ™ βœ‘ ✁ ✁ οΏ½ ✁ ✝ οΏ½ ☎ βœ‚ ✁ ✝ βœ” οΏ½ ✜ βœ“ βœ› ✝ βœ‚ ✁ β˜› βœ„ βœ› ✁ οΏ½ βœ„ ✁ οΏ½ βœ› ✝ βœ‚ βœ„ ✁ οΏ½ ✁ βœ› ✝ οΏ½ ✁ βœ‚ βœ„ ✁ οΏ½ οΏ½ βœ™ βœ‘ ✁ βœ„ ✁ ✜ βœ„ οΏ½ οΏ½ βœ“ β˜› ✝ ✁ βœ‚ βœ› ✝ ✜ οΏ½ βœ” Better data types, better β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  17. An Introduction to Type Theory – p.9/32 βœ„ βœ™ βœ‘ ✁ ✁ οΏ½ βœ” οΏ½ ✜ βœ“ οΏ½ βœ™ βœ‘ ✁ ✁ ✠ οΏ½ βœ™ ✁ οΏ½ ✠ βœ„ ✁ ✁ βœ‘ οΏ½ ✠ οΏ½ βœ‚ βœ™ βœ’ βœ› ✜ οΏ½ ✝ οΏ½ βœ“ ✁ βœ‚ βœ› βœ„ ✁ οΏ½ ✜ β˜› β˜› ✝ βœ” οΏ½ ✁ βœ‚ οΏ½ ☎ ✁ ✁ βœ‚ ✝ βœ› οΏ½ βœ› βœ„ οΏ½ οΏ½ ✝ ✁ οΏ½ βœ› βœ„ ✁ ✠ ☎ οΏ½ ✁ ✜ οΏ½ βœ› ✝ βœ‚ ✁ ✝ βœ” οΏ½ ✜ βœ“ βœ› ✝ βœ‚ β˜› ✝ ☎ βœ„ ✁ οΏ½ βœ„ ✁ οΏ½ βœ› ✝ βœ‚ βœ„ ✁ οΏ½ ✁ βœ™ β˜› ✁ βœ‚ βœ‘ ✁ ✁ ✌ ✝ βœ› βœ‚ βœ„ ✁ οΏ½ οΏ½ βœ™ βœ‘ ✁ βœ„ οΏ½ ✝ βœ› βœ“ ✜ οΏ½ βœ” ✁ βœ„ οΏ½ ✁ Better data types, better β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  18. An Introduction to Type Theory – p.9/32 βœ‘ ✜ οΏ½ βœ” οΏ½ ✁ ✁ βœ™ οΏ½ οΏ½ οΏ½ ✝ ✁ βœ‚ ✝ βœ“ βœ™ οΏ½ βœ™ ✁ βœ‘ βœ™ οΏ½ οΏ½ βœ‚ βœ’ βœ‘ βœ› ✜ ✠ ✠ βœ„ ✁ ✁ βœ› βœ› οΏ½ οΏ½ οΏ½ ✁ βœ‚ βœ› βœ„ ✁ βœ“ ☎ ✜ β˜› ✝ βœ” οΏ½ ✁ βœ‚ β˜› βœ” βœ„ βœ„ ✁ οΏ½ ✝ ✁ οΏ½ βœ› ✁ ✠ βœ„ βœ“ βœ‚ βœ™ βœ’ βœ› ✜ ✠ ✁ ✠ βœ„ οΏ½ ✁ βœ› βœ“ ✜ οΏ½ βœ” ✝ βœ‚ βœ‚ ✝ βœ› οΏ½ ✜ β˜› ✝ ✝ ✁ βœ‚ βœ› ✁ οΏ½ ✁ βœ„ βœ‚ ✝ οΏ½ β˜› ✁ βœ„ οΏ½ ✁ βœ„ ☎ ✁ ✁ ✝ ✌ οΏ½ ✁ βœ„ βœ‚ βœ› ✝ ✁ βœ™ ✁ βœ‘ βœ™ οΏ½ ☎ ✠ βœ› οΏ½ βœ‘ βœ„ βœ“ ✜ οΏ½ βœ” οΏ½ ✁ ✁ οΏ½ ✁ βœ„ Better data types, better β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  19. An Introduction to Type Theory – p.9/32 ✝ βœ‘ βœ™ οΏ½ οΏ½ ✝ ✁ βœ‚ βœ› ✁ οΏ½ βœ› βœ„ ✁ οΏ½ ✝ ✁ ✁ οΏ½ βœ› βœ„ βœ‚ βœ™ βœ’ βœ› ✜ ✠ ✠ ✁ βœ” ✁ βœ‘ βœ™ οΏ½ βœ“ ✜ οΏ½ οΏ½ βœ„ οΏ½ βœ” βœ™ βœ’ βœ› ✜ ✠ ✠ βœ„ βœ“ βœ“ ✜ β˜› ✝ βœ” οΏ½ ✁ βœ‚ βœ‚ ✁ ✁ ✠ βœ“ βœ‚ βœ™ βœ’ βœ› ✜ ✠ βœ„ βœ„ βœ” ☎ β˜› οΏ½ ✁ βœ‚ βœ› οΏ½ οΏ½ βœ™ βœ‚ βœ“ ✜ οΏ½ βœ” ✝ ✁ ✝ ✝ βœ› οΏ½ ✜ β˜› ✝ ✁ βœ‚ βœ› βœ‚ βœ› βœ› ✁ οΏ½ ✁ βœ„ βœ‚ ✝ οΏ½ ✁ ✁ βœ„ οΏ½ ✁ βœ„ ☎ β˜› βœ‘ ✝ βœ“ βœ™ βœ› ✝ ✌ ✁ ✁ βœ‘ οΏ½ βœ„ ☎ ✠ ✁ οΏ½ ✠ βœ„ ✁ ✁ ✜ βœ‚ ✁ ✁ οΏ½ οΏ½ βœ™ βœ‘ οΏ½ ✁ βœ” βœ„ οΏ½ ✁ οΏ½ βœ„ Better data types, better β˜žβœ‚βœ where where let β˜žβœ‚βœ β˜žβœ‚βœ data data

  20. An Introduction to Type Theory – p.9/32 βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ› ✁ οΏ½ οΏ½ ✝ ✁ οΏ½ βœ› βœ„ ✁ οΏ½ βœ™ βœ‚ βœ‘ βœ› ✜ ✠ ✠ βœ„ ✁ ✁ βœ™ βœ‘ οΏ½ βœ“ ✜ οΏ½ βœ” οΏ½ ✁ ✁ βœ“ βœ™ οΏ½ ✁ βœ” βœ“ ✜ β˜› ✝ βœ” οΏ½ βœ› ✠ βœ„ ✁ ✠ βœ„ ✝ βœ› βœ„ ✁ ✠ βœ„ ✜ βœ’ οΏ½ βœ› ✜ ✠ ✠ βœ„ βœ” ☎ β˜› ✁ βœ› ✠ βœ› βœ„ ✁ βœ“ βœ‚ βœ™ βœ’ βœ’ βœ™ βœ‚ βœ› ✜ οΏ½ βœ” ✝ ✁ βœ‚ ✝ οΏ½ βœ› ✜ β˜› ✝ ✁ βœ‚ ✝ οΏ½ βœ“ ✝ ✜ οΏ½ ✁ οΏ½ ✁ βœ„ βœ‚ ✝ βœ› ✁ βœ‚ βœ„ οΏ½ ✁ βœ„ ☎ β˜› ✁ βœ“ βœ› οΏ½ βœ‚ οΏ½ ✁ ✠ ☎ οΏ½ βœ™ ✁ βœ‘ ✁ ✁ βœ” ✌ ✝ βœ› βœ„ ✁ βœ™ οΏ½ οΏ½ ✁ βœ„ οΏ½ ✁ βœ„ ✁ βœ‘ ✁ βœ‘ βœ™ οΏ½ οΏ½ ✠ βœ„ Better data types, better β˜žβœ‚βœ where where let is a total function. β˜žβœ‚βœ β˜žβœ‚βœ data data

  21. An Introduction to Type Theory – p.9/32 οΏ½ οΏ½ βœ› βœ„ ✁ οΏ½ ✝ ✁ βœ› ✝ βœ„ ✁ βœ“ βœ‚ βœ™ βœ’ βœ› ✜ βœ› βœ‚ ✠ βœ„ οΏ½ βœ„ ✁ ✁ βœ‘ βœ™ οΏ½ βœ“ ✜ βœ” ✁ οΏ½ ✁ ✁ βœ‘ βœ™ οΏ½ οΏ½ ✝ ✠ βœ” ✠ ✁ ✁ βœ› βœ„ ✁ ✠ βœ„ ✝ βœ› βœ„ βœ› βœ” βœ„ ✁ οΏ½ ✁ βœ‚ βœ„ ☎ βœ† οΏ½ ✝ ☎ βœ‚ β˜› οΏ½ ✁ ✠ βœ› βœ„ ✁ βœ“ βœ™ β˜› βœ’ βœ› ✜ ✠ ✠ βœ„ βœ” βœ“ ✜ οΏ½ ✠ ✜ οΏ½ οΏ½ βœ” ✝ ✁ βœ‚ ✝ βœ› ✜ βœ“ β˜› ✝ ✁ βœ‚ ✝ βœ› βœ“ βœ› ✜ βœ› βœ” οΏ½ ✁ οΏ½ ✁ βœ„ βœ‚ ✝ βœ› ✁ ✝ βœ„ οΏ½ ✁ βœ„ ☎ β˜› ✁ βœ‚ οΏ½ ✜ βœ™ ✁ ✁ βœ‘ οΏ½ οΏ½ ☎ ✠ βœ‚ ✌ οΏ½ οΏ½ ✠ βœ„ ✁ ✁ βœ‘ ✁ ✝ βœ™ βœ™ ✁ βœ„ οΏ½ ✁ βœ’ βœ„ ✁ βœ› βœ‘ βœ™ οΏ½ οΏ½ ✁ βœ„ βœ‚ οΏ½ Better data types, better β˜žβœ‚βœ where is not well-typed. where let is a total function. β˜žβœ‚βœ β˜žβœ‚βœ data data

  22. Verify An Introduction to Type Theory – p.10/32

  23. οΏ½ ✁ βœ‚ Verify How can we use on lists of unknown length user input,. . . ? An Introduction to Type Theory – p.10/32

  24. ✞ οΏ½ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ οΏ½ ✑ βœ„ βœ‚ ✞ ✁ ✁ ✝ ✁ βœ‚ β˜› βœ„ οΏ½ βœ„ ✑ οΏ½ ✑ βœ† βœ‚ ✁ οΏ½ οΏ½ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  25. βœ„ ✝ οΏ½ ☎ βœ‚ βœ„ βœ† οΏ½ οΏ½ ✞ ✑ οΏ½ ✑ βœ† ✁ οΏ½ ✁ ✞ βœ‚ οΏ½ βœ„ ✑ βœ„ οΏ½ ✁ βœ‚ ✍ ✌ ☞ ✑ οΏ½ βœ‚ βœ„ β˜› βœ‚ ✁ ✁ οΏ½ ✁ ✞ βœ„ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  26. ✝ οΏ½ οΏ½ ✞ οΏ½ ✑ βœ† ✁ οΏ½ ✁ ✞ βœ‚ βœ„ οΏ½ οΏ½ ☞ ✌ ✍ ✁ οΏ½ ✁ ✞ βœ‚ βœ„ οΏ½ ✟ οΏ½ βœ† βœ† βœ‚ οΏ½ ✁ βœ‚ ✍ ✌ ☞ ✑ βœ„ οΏ½ βœ„ β˜› ✁ βœ„ ✁ οΏ½ ✁ ✞ βœ‚ βœ„ ✑ οΏ½ βœ„ ☎ βœ‚ ✑ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  27. ✑ οΏ½ οΏ½ βœ† ✁ οΏ½ ✁ ✞ βœ‚ βœ„ οΏ½ οΏ½ ☞ ✌ βœ‚ ✞ ✁ βœ‚ ✞ οΏ½ οΏ½ ✁ οΏ½ ✁ ✞ βœ‚ βœ„ οΏ½ ✟ οΏ½ ✝ βœ† ✁ οΏ½ ✁ βœ‚ ✍ ✌ ☞ ✑ βœ„ οΏ½ βœ„ β˜› βœ‚ ✁ οΏ½ οΏ½ ✁ ✞ βœ‚ βœ„ ✑ οΏ½ βœ„ ☎ βœ‚ βœ„ βœ† οΏ½ ✑ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  28. οΏ½ οΏ½ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ ✞ οΏ½ βœ‚ ✁ βœ‚ οΏ½ ✌ ☞ βœ† βœ„ ✟ βœ„ ✞ οΏ½ βœ† ✑ ✟ οΏ½ βœ„ βœ‚ ✁ ✑ οΏ½ ✁ ✍ ✌ ☞ οΏ½ βœ† οΏ½ βœ‚ οΏ½ οΏ½ ✁ οΏ½ ✁ ✁ βœ‚ β˜› βœ„ βœ„ βœ‚ ✑ ☞ ✌ ✍ βœ‚ ✁ οΏ½ ✞ βœ„ ✞ ✝ ✁ οΏ½ ✁ βœ† ✑ οΏ½ ✞ οΏ½ ✑ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ οΏ½ ✟ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  29. ✌ οΏ½ ✑ ✟ οΏ½ βœ„ βœ‚ ✞ ✁ ✁ οΏ½ οΏ½ οΏ½ ✞ βœ‚ ✁ βœ‚ οΏ½ βœ† βœ† ☞ οΏ½ ✞ οΏ½ βœ† ✑ ✟ οΏ½ βœ„ βœ‚ ✁ ✌ οΏ½ ✁ βœ‚ οΏ½ ✁ ✟ ✁ οΏ½ ☞ οΏ½ οΏ½ βœ„ ✞ ✁ οΏ½ ✁ ✁ βœ‚ β˜› οΏ½ βœ„ βœ„ ✑ ☞ ✌ ✍ βœ‚ ✁ οΏ½ βœ‚ ✑ βœ„ οΏ½ βœ‚ ✞ ✁ οΏ½ ✁ βœ† ✑ ✞ οΏ½ ✝ οΏ½ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ ✟ Verify How can we use on lists of unknown length user input,. . . ? let An Introduction to Type Theory – p.10/32

  30. An Introduction to Type Theory – p.10/32 οΏ½ ✁ βœ‚ οΏ½ ✁ ✟ ✁ οΏ½ ✌ ☞ βœ† ✁ ✑ ✟ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ ✞ οΏ½ οΏ½ ✍ ✌ ☞ οΏ½ ✑ βœ„ βœ‚ ✞ ✁ ✁ βœ‚ οΏ½ βœ† οΏ½ ✟ οΏ½ βœ† ✑ ✟ οΏ½ βœ„ οΏ½ ✞ βœ‚ οΏ½ ☎ βœ„ οΏ½ ✑ βœ„ βœ‚ ✞ ✁ ✁ βœ„ ✁ βœ‚ β˜› βœ„ οΏ½ βœ„ ✑ οΏ½ ✁ βœ‚ βœ† βœ‚ βœ‚ ✁ βœ‚ οΏ½ ✌ ☞ οΏ½ οΏ½ βœ„ ✞ οΏ½ ✁ οΏ½ ✁ βœ† ✑ οΏ½ ✞ ✝ οΏ½ on lists of unknown length Verify How can we use user input,. . . ? let

  31. An Introduction to Type Theory – p.10/32 ✁ βœ† οΏ½ ✟ οΏ½ βœ† ✑ ✟ οΏ½ βœ„ βœ‚ ✞ οΏ½ ✁ ✁ βœ‚ οΏ½ ✁ ✟ ✁ οΏ½ ✌ ☞ οΏ½ βœ† ✑ οΏ½ οΏ½ οΏ½ ☞ ✍ ✌ ☞ οΏ½ ✁ ✟ ✁ οΏ½ οΏ½ ✍ ✌ οΏ½ ✁ οΏ½ ✞ βœ‚ ✁ βœ‚ οΏ½ οΏ½ οΏ½ ✑ βœ„ βœ‚ ✞ ✟ βœ„ οΏ½ ✞ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ οΏ½ ✑ βœ„ βœ‚ ✁ ✝ οΏ½ ✁ ✁ βœ‚ β˜› βœ„ οΏ½ βœ„ ✑ οΏ½ ✁ βœ‚ ✞ βœ‚ οΏ½ ✞ ✁ οΏ½ ✁ οΏ½ οΏ½ ✞ βœ‚ ✁ βœ‚ ✌ οΏ½ ☞ οΏ½ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ βœ† ✑ on lists of unknown length Verify How can we use user input,. . . ? let

  32. An Introduction to Type Theory – p.10/32 βœ„ ✁ οΏ½ ✁ οΏ½ βœ† οΏ½ ✟ οΏ½ βœ† ✑ ✟ οΏ½ βœ‚ βœ‚ ✞ ✁ οΏ½ ✁ βœ‚ οΏ½ ✁ ✟ ✁ οΏ½ ✌ ☞ ✞ βœ„ βœ† βœ‚ ✍ ✌ ☞ οΏ½ ✁ ✟ ✁ οΏ½ οΏ½ οΏ½ οΏ½ ✞ ✁ ✑ βœ‚ οΏ½ ✌ ☞ οΏ½ οΏ½ ✞ βœ‚ ✁ βœ‚ οΏ½ οΏ½ οΏ½ οΏ½ ✑ ✝ ✞ οΏ½ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ οΏ½ ✑ βœ„ βœ‚ ✁ ✞ οΏ½ ✁ ✁ βœ‚ β˜› βœ„ οΏ½ βœ„ ✑ οΏ½ ✁ ✟ οΏ½ βœ‚ ✁ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ οΏ½ ✞ βœ‚ βœ‚ ✑ οΏ½ ✌ ☞ οΏ½ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ βœ† on lists of unknown length Verify How can we use user input,. . . ? let

  33. An Introduction to Type Theory – p.10/32 οΏ½ οΏ½ οΏ½ ✑ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ βœ† οΏ½ ✟ βœ† βœ‚ ✑ ✟ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ βœ‚ οΏ½ ✁ ✟ οΏ½ ✁ οΏ½ ✟ βœ† οΏ½ βœ‚ ✟ οΏ½ ✁ ✟ ✁ οΏ½ ✌ ☞ οΏ½ ✁ ✁ βœ‚ οΏ½ οΏ½ οΏ½ οΏ½ ✞ βœ‚ ✁ βœ‚ οΏ½ ✌ ☞ οΏ½ οΏ½ ✞ ✁ ✌ οΏ½ βœ‚ ✞ ✝ οΏ½ οΏ½ βœ† βœ„ βœ‚ ☎ βœ„ οΏ½ ✑ βœ„ ✞ ✑ ✁ οΏ½ ✁ ✁ βœ‚ β˜› βœ„ οΏ½ βœ„ ✑ οΏ½ ✁ ☞ βœ† βœ‚ οΏ½ οΏ½ βœ† ✑ ✟ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ ✞ ✁ βœ‚ ✁ βœ‚ οΏ½ ✌ ☞ οΏ½ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ on lists of unknown length Verify How can we use user input,. . . ? let

  34. Going further An Introduction to Type Theory – p.11/32

  35. ✁ οΏ½ ✁ ✞ βœ‚ βœ„ Going further The type of is not informative enough for some of its potential applications. An Introduction to Type Theory – p.11/32

  36. ✁ οΏ½ ✁ οΏ½ ✁ ✁ οΏ½ βœ„ ✟ ✁ ✑ βœ‚ οΏ½ οΏ½ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ ✞ Going further The type of is not informative enough for some of its potential applications. How is related to ? An Introduction to Type Theory – p.11/32

  37. βœ„ οΏ½ ✞ ✁ οΏ½ ✁ οΏ½ βœ‚ οΏ½ ✁ οΏ½ ✑ βœ‚ βœ‚ ✞ ✁ ✁ βœ„ οΏ½ ✁ οΏ½ ✁ ✞ βœ‚ βœ„ οΏ½ ✁ ✞ οΏ½ ✁ ✟ ✁ οΏ½ βœ‚ Going further The type of is not informative enough for some of its potential applications. How is related to ? When does return ? An Introduction to Type Theory – p.11/32

  38. οΏ½ ✝ ✁ ☎ βœ‚ ✁ ✌ βœ“ ✜ β˜› βœ” β˜› οΏ½ ✁ ✜ βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ ☎ ✁ ✌ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✁ ✌ ✝ ✁ βœ„ βœ‚ ✁ improved. let β˜žβœ‚βœ An Introduction to Type Theory – p.12/32

  39. An Introduction to Type Theory – p.12/32 βœ› βœ“ οΏ½ ✁ βœ› βœ— βœ’ οΏ½ ✁ ✝ οΏ½ ✁ βœ— ✁ βœ’ βœ‚ οΏ½ βœ› ✝ βœ‚ ✁ ✝ βœ„ ✁ ✝ βœ‚ ✌ ✁ ✁ βœ” ✝ βœ† οΏ½ βœ“ οΏ½ ✁ βœ› βœ— βœ’ οΏ½ ✝ ✝ οΏ½ οΏ½ βœ’ βœ’ βœ„ βœ„ ✁ οΏ½ βœ„ ✝ βœ” οΏ½ οΏ½ βœ› ✝ ☎ ✁ οΏ½ β˜› ☎ ✌ ✁ βœ‚ βœ„ ✁ ✌ ✁ ✁ βœ‚ οΏ½ βœ› ✝ βœ‚ ✁ ✝ βœ„ βœ‚ βœ— βœ‚ ✌ ✌ βœ’ οΏ½ βœ„ ✁ ✝ βœ„ οΏ½ βœ” ✝ βœ“ ✁ βœ” ✝ βœ‚ βœ“ ✜ ✜ ✁ οΏ½ ✁ β˜› β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ where let β˜žβœ‚βœ data

  40. An Introduction to Type Theory – p.12/32 ✌ ✝ οΏ½ οΏ½ βœ’ βœ’ βœ„ βœ„ ✁ οΏ½ βœ„ ✝ βœ” ✝ ✁ οΏ½ βœ‚ βœ“ οΏ½ ✁ βœ› βœ— βœ’ οΏ½ ✁ ✝ οΏ½ ✁ βœ› βœ— ✁ βœ’ βœ‚ ☎ ✝ οΏ½ ✁ βœ› βœ— βœ’ οΏ½ ✁ ✝ οΏ½ ✁ οΏ½ ✝ βœ‘ βœ— βœ‚ βœ„ ✁ ✝ βœ„ οΏ½ βœ” ✝ βœ† οΏ½ βœ“ οΏ½ ✁ βœ› ✁ οΏ½ οΏ½ ✁ βœ› β˜› ✜ βœ“ ✌ ✁ βœ‚ ☎ ✁ οΏ½ β˜› ☎ ✌ βœ‚ οΏ½ βœ„ ✁ ✝ ✌ ✁ βœ‚ οΏ½ βœ› ✝ βœ‚ ✁ ✝ βœ„ βœ‚ βœ” ✝ ✁ βœ„ ✝ βœ‚ ✁ ✝ βœ„ ✁ ✝ οΏ½ ✁ βœ› βœ— βœ’ οΏ½ βœ’ βœ” ✁ ✜ βœ“ ✝ βœ„ οΏ½ βœ‚ ✁ ✝ ✌ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  41. An Introduction to Type Theory – p.12/32 ✁ βœ„ βœ’ βœ’ οΏ½ οΏ½ ✝ οΏ½ ✁ βœ’ βœ— βœ› ✁ οΏ½ βœ“ βœ„ οΏ½ βœ† οΏ½ ✁ οΏ½ βœ’ βœ— βœ› ✁ βœ“ βœ„ βœ‚ ✁ ✌ ✝ βœ” ✝ οΏ½ ✝ οΏ½ ✝ ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ οΏ½ βœ— ✁ οΏ½ ✝ οΏ½ ✁ βœ‚ βœ› βœ’ βœ” βœ‘ οΏ½ βœ„ ✝ ✁ βœ„ βœ‚ ☎ οΏ½ ✝ οΏ½ ✁ οΏ½ ✝ ✁ ✁ οΏ½ ✁ ✌ οΏ½ βœ” ✝ β˜› ✜ βœ“ ✌ ✁ βœ‚ ☎ ✁ οΏ½ β˜› ☎ ✁ ✜ βœ› βœ‚ βœ„ ✝ ✁ βœ‚ ✝ οΏ½ βœ‚ βœ‚ ✁ ✌ ✝ ✁ βœ„ βœ› ✁ βœ“ ✝ βœ› ✁ οΏ½ ✝ ✁ βœ„ ✁ βœ’ βœ‚ ✝ βœ› οΏ½ βœ‚ βœ’ βœ— βœ‚ βœ— ✝ οΏ½ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ ✁ βœ„ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  42. An Introduction to Type Theory – p.12/32 βœ† βœ— βœ› ✁ οΏ½ βœ“ οΏ½ ✝ οΏ½ βœ” οΏ½ βœ„ ✝ ✁ βœ„ βœ‚ βœ’ ✁ ☎ βœ„ βœ“ βœ‚ ✁ ✌ ✝ βœ” ✝ οΏ½ ✝ ✁ βœ„ βœ„ βœ’ βœ’ οΏ½ οΏ½ βœ‘ ✝ ✁ ✁ ✁ βœ‚ βœ‚ βœ‘ ☎ ✝ οΏ½ βœ“ ✝ ✜ οΏ½ βœ” ✝ οΏ½ ✁ βœ‚ οΏ½ ☎ οΏ½ βœ› ✁ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— ✁ ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ οΏ½ βœ› β˜› ✁ ☎ βœ‚ ✁ ✌ βœ“ ✜ ✝ β˜› βœ” οΏ½ ✁ ✜ βœ“ βœ‚ ✁ οΏ½ ☎ ✝ οΏ½ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› βœ‚ ✌ ✁ ✌ ✝ ✁ βœ„ βœ‚ ✁ βœ— ✌ βœ” βœ’ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ βœ— βœ„ βœ› ✁ οΏ½ ✝ ✁ οΏ½ βœ’ ✝ οΏ½ ✁ ✁ οΏ½ οΏ½ ✁ βœ› βœ„ βœ— βœ’ οΏ½ ✝ βœ„ ✝ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  43. An Introduction to Type Theory – p.12/32 βœ„ οΏ½ βœ“ οΏ½ βœ† ✝ βœ” οΏ½ ✝ βœ› ✁ βœ„ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ— οΏ½ βœ„ ✌ ✝ βœ” ✝ βœ„ οΏ½ ✁ βœ„ βœ’ βœ’ βœ’ οΏ½ οΏ½ ✝ ✁ οΏ½ ✁ ✝ βœ‚ ✁ ☎ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ βœ“ βœ’ ✜ οΏ½ βœ” ✝ οΏ½ ✁ βœ‚ οΏ½ βœ’ ✁ βœ‚ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ βœ‘ βœ„ ☎ ✝ οΏ½ ✁ ☎ ✝ οΏ½ ✁ ✁ οΏ½ βœ“ ✝ ☎ βœ‚ ✁ ✌ βœ“ ✜ β˜› βœ” οΏ½ οΏ½ ✁ ✜ βœ“ βœ‚ ✁ ✌ ✁ β˜› βœ” οΏ½ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› βœ‚ ☎ ✁ ✌ ✝ ✁ βœ„ βœ‚ ✁ ✌ οΏ½ ✝ ✁ ✁ οΏ½ βœ› οΏ½ βœ‚ βœ’ βœ— βœ› οΏ½ ✁ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ βœ‚ ✝ ✝ βœ› ✝ βœ„ βœ„ οΏ½ βœ„ βœ’ βœ— οΏ½ ✁ ✝ ✁ ✁ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  44. An Introduction to Type Theory – p.12/32 ✁ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ οΏ½ ✝ οΏ½ ✁ βœ’ βœ— βœ› ✁ οΏ½ ✝ βœ‚ βœ‘ βœ„ ✝ ✝ βœ’ βœ„ βœ’ βœ’ οΏ½ οΏ½ ✝ ✁ οΏ½ βœ— βœ„ βœ› ✁ οΏ½ βœ“ οΏ½ βœ† ✝ βœ” οΏ½ ☎ οΏ½ ✁ ✜ βœ‚ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ οΏ½ οΏ½ βœ” βœ“ ✜ ✝ βœ” οΏ½ ✁ βœ‚ ✁ ☎ ✁ ☎ ☎ ✝ οΏ½ ✁ βœ„ βœ’ βœ’ οΏ½ ✝ βœ” βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ ✁ οΏ½ οΏ½ οΏ½ βœ‚ ✁ ✌ βœ“ ✜ β˜› ✝ βœ” ✁ ✁ ✜ βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ ☎ οΏ½ ✁ βœ‚ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ ✁ β˜› ✌ ✝ ✁ βœ„ βœ‚ ✁ ✌ ☎ ✝ βœ„ βœ„ βœ’ βœ„ βœ› ✁ οΏ½ ✝ ✁ οΏ½ βœ— βœ’ βœ› ✁ οΏ½ βœ“ βœ‚ ✁ ✌ ✝ βœ— βœ‚ οΏ½ ✝ βœ„ οΏ½ ✝ βœ’ βœ— βœ› ✁ οΏ½ βœ” ✁ βœ„ ✝ ✁ βœ‚ ✝ βœ› β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  45. An Introduction to Type Theory – p.12/32 βœ› οΏ½ ✁ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— ✁ ☎ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ☎ ✝ βœ‘ οΏ½ οΏ½ οΏ½ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ βœ“ βœ‚ οΏ½ βœ† ✝ βœ” οΏ½ βœ„ ✝ ✁ βœ„ ✝ ✁ βœ’ βœ“ ☎ β˜› βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ✜ ✁ οΏ½ βœ” βœ“ ✜ ✝ βœ” οΏ½ ✁ βœ‚ οΏ½ βœ› βœ„ οΏ½ βœ’ βœ’ οΏ½ ☎ ✝ βœ‚ βœ‘ ☎ ✝ ✁ βœ— βœ“ ✜ οΏ½ βœ” ☎ οΏ½ ✁ βœ‚ βœ’ ✁ οΏ½ βœ„ ✁ ✁ ✌ βœ“ ✜ β˜› ✝ βœ” οΏ½ ✜ ☎ βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ βœ‚ ✁ βœ„ βœ‚ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ ✁ οΏ½ ✌ ✝ ✁ βœ„ βœ‚ ✁ ✌ ☎ β˜› βœ„ ✁ βœ’ βœ› οΏ½ ✝ ✁ οΏ½ βœ’ ✁ βœ— ✁ βœ› οΏ½ οΏ½ βœ“ βœ‚ ✁ ✌ ✝ βœ” ✁ βœ— βœ„ βœ’ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ ✁ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✝ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  46. An Introduction to Type Theory – p.12/32 ☎ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ βœ‚ βœ‘ ✝ ✝ οΏ½ ✁ ☎ ✝ οΏ½ ✁ βœ„ βœ’ βœ’ ✁ οΏ½ ☎ ✝ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ βœ“ οΏ½ βœ† βœ” ✁ οΏ½ βœ„ ✝ ✁ βœ„ βœ‚ βœ‘ ☎ ✝ οΏ½ οΏ½ ✝ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ ✜ ✝ βœ” βœ‚ ✝ βœ‘ ☎ ✝ οΏ½ ✁ οΏ½ ✝ οΏ½ ✁ βœ‚ οΏ½ ☎ βœ‚ ☎ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” οΏ½ βœ‘ ✁ βœ‚ βœ’ βœ— βœ› ✁ οΏ½ ☎ β˜› βœ‚ ✁ οΏ½ οΏ½ ✜ ✌ βœ“ ✜ β˜› ✝ βœ” οΏ½ ✁ βœ“ βœ‚ βœ‚ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ ✁ ✁ ☎ οΏ½ ✁ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✌ ✁ ✝ ✁ βœ„ βœ‚ ✁ ✌ ☎ β˜› οΏ½ βœ„ ✁ βœ’ ✝ βœ— βœ— βœ› ✁ οΏ½ βœ“ βœ‚ ✁ ✌ βœ” ✁ ✝ βœ„ οΏ½ ✁ βœ„ βœ„ βœ’ βœ’ οΏ½ οΏ½ βœ’ ✝ βœ› οΏ½ ✝ ✁ βœ„ οΏ½ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ βœ’ βœ— βœ› ✁ ✁ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  47. An Introduction to Type Theory – p.12/32 βœ‚ βœ” ☎ οΏ½ ✁ βœ‚ βœ’ βœ— βœ› ✁ οΏ½ ☎ β˜› βœ‘ ✜ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ ✜ ✝ βœ” οΏ½ οΏ½ βœ“ βœ‘ ☎ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ✝ ✁ οΏ½ ✁ βœ„ βœ’ βœ’ οΏ½ ☎ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ βœ‚ ☎ ✁ ✁ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ βœ‚ ✌ ✁ ✝ βœ” βœ• βœ‚ βœ’ βœ— βœ› ✁ οΏ½ ✝ οΏ½ ✁ βœ‚ βœ‚ οΏ½ ✝ βœ” οΏ½ ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ“ ✝ ✜ βœ“ οΏ½ βœ† ✝ βœ” βœ” βœ• βœ„ βœ’ βœ’ οΏ½ οΏ½ ✁ οΏ½ οΏ½ ✁ οΏ½ ✁ ✜ βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ βœ„ ✝ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ ✁ βœ„ ✝ ✁ ✁ βœ” β˜› βœ› ✁ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✁ ✌ ✝ βœ„ ✜ βœ‚ ✁ ✌ ☎ β˜› οΏ½ ✁ ☎ βœ‚ ✁ ✌ βœ“ ✝ βœ‚ οΏ½ οΏ½ βœ‚ οΏ½ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ βœ“ βœ† βœ’ ✝ βœ” οΏ½ βœ„ ✝ ✁ βœ„ βœ‚ βœ‘ ☎ ✝ οΏ½ βœ’ ✝ βœ„ βœ“ βœ’ βœ— βœ› ✁ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ βœ„ οΏ½ βœ” βœ‚ ✁ ✌ ✁ ✝ οΏ½ ✝ βœ„ β˜žβœ‚βœ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  48. An Introduction to Type Theory – p.12/32 βœ“ βœ’ βœ— βœ› ✁ οΏ½ ☎ β˜› βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ✜ ✁ οΏ½ βœ” βœ“ ✜ ✝ βœ” οΏ½ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ‚ οΏ½ ✝ βœ„ ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ☎ ✝ οΏ½ ✁ βœ’ ☎ βœ’ οΏ½ ☎ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” οΏ½ βœ‚ βœ— ✁ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ βœ‚ ✌ οΏ½ ✝ βœ” βœ• βœ‚ βœ’ βœ— βœ› ✁ οΏ½ ✝ οΏ½ ✁ βœ‚ βœ” ✜ βœ‘ ✝ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ ✜ βœ“ οΏ½ βœ† βœ” βœ“ βœ” βœ• βœ„ βœ’ βœ’ οΏ½ οΏ½ ✝ οΏ½ ✁ βœ„ βœ’ βœ’ οΏ½ ✁ οΏ½ βœ’ βœ„ ✁ ✜ βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ ✁ οΏ½ βœ” βœ’ βœ— βœ› ✁ οΏ½ ✝ ✁ βœ„ ✝ ✁ βœ‚ οΏ½ βœ› οΏ½ ✝ βœ‚ ✁ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✁ ✌ ✝ βœ„ β˜› βœ‚ ✁ ✌ ☎ β˜› οΏ½ ✁ ☎ βœ‚ ✁ ✌ βœ“ ✜ οΏ½ ✝ βœ’ βœ” βœ— ✁ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ βœ“ οΏ½ βœ† ✝ οΏ½ οΏ½ βœ„ ✝ ✁ βœ„ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ οΏ½ ✝ ✁ οΏ½ ✝ βœ’ βœ— ✁ βœ‚ βœ“ οΏ½ ✁ βœ› βœ’ ✌ οΏ½ ✁ ✝ οΏ½ ✁ βœ› βœ’ βœ› ✝ βœ” ✝ βœ„ οΏ½ βœ„ ✁ βœ„ β˜žβœ‚βœ ✝ β˜Žβœ„ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  49. An Introduction to Type Theory – p.12/32 βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” βœ“ ✜ ✝ βœ” οΏ½ βœ‘ β˜› ☎ ✝ οΏ½ ✁ οΏ½ ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ βœ“ ✜ βœ‚ ☎ βœ” ☎ οΏ½ ✁ ☎ ✝ οΏ½ ✁ βœ„ βœ’ βœ’ οΏ½ ☎ ✝ βœ‚ βœ‘ ✝ οΏ½ οΏ½ ✁ βœ“ ✜ οΏ½ βœ” ☎ οΏ½ ✁ βœ‚ βœ’ βœ— βœ› ✁ οΏ½ βœ“ ✁ οΏ½ βœ“ βœ‚ ✁ ✌ ✝ βœ” βœ• βœ‚ βœ’ βœ— βœ› ✁ οΏ½ ✝ ✁ οΏ½ βœ‚ βœ’ βœ— βœ› ✁ βœ“ ✜ οΏ½ βœ” βœ“ ✜ β˜› ✝ βœ” βœ” ✜ ✜ ✁ βœ“ οΏ½ βœ† ✝ βœ” βœ” βœ• βœ„ βœ’ βœ’ οΏ½ οΏ½ ✝ οΏ½ βœ„ βœ“ βœ’ βœ’ οΏ½ βœ“ ✜ οΏ½ βœ” ✝ βœ‚ βœ‘ ☎ ✝ οΏ½ ✁ ✝ οΏ½ βœ‘ βœ— βœ“ βœ‚ ✁ ✌ ✝ βœ” οΏ½ βœ„ ✝ ✁ βœ„ οΏ½ βœ’ βœ› ✁ ✁ οΏ½ ✝ ✁ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ βœ‚ βœ— ✜ οΏ½ ✁ βœ„ βœ‚ βœ„ ✝ ✁ βœ‚ ✝ βœ› οΏ½ βœ‚ ✁ ✌ ✝ ✁ βœ‚ βœ” ✁ ✌ ☎ β˜› οΏ½ ✁ ☎ βœ‚ ✁ ✌ βœ“ ✜ β˜› ✝ βœ› βœ’ οΏ½ βœ‚ ✝ βœ› ✁ οΏ½ βœ“ οΏ½ βœ† ✝ βœ” οΏ½ βœ„ ✝ ✁ βœ„ βœ‘ οΏ½ ☎ ✝ οΏ½ ✁ οΏ½ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ ✝ βœ’ βœ— ✁ ✝ ✁ οΏ½ βœ’ βœ— βœ› ✁ οΏ½ βœ“ βœ‚ ✁ ✌ ✝ βœ” ✝ βœ„ οΏ½ βœ„ οΏ½ οΏ½ βœ’ βœ’ βœ„ ☎ ✁ β˜žβœ‚βœ ✝ β˜Žβœ„ ✝ β˜Žβœ„ improved. β˜žβœ‚βœ ✝ β˜Žβœ„ ✝ β˜Žβœ„ β˜žβœ‚βœ let where let β˜žβœ‚βœ data

  50. Definitional equality An Introduction to Type Theory – p.13/32

  51. οΏ½ ✑ οΏ½ ✟ ✁ ✑ οΏ½ βœ† ✁ ✟ ✑ ✁ οΏ½ ✑ οΏ½ οΏ½ βœ† βœ„ βœ‚ ✞ ✁ οΏ½ ✁ ✁ Definitional equality The typing of depends on the equations: An Introduction to Type Theory – p.13/32

  52. οΏ½ ✑ οΏ½ ✟ ✁ ✑ οΏ½ βœ† ✁ ✟ ✑ ✁ οΏ½ ✑ οΏ½ οΏ½ βœ† βœ„ βœ‚ ✞ ✁ οΏ½ ✁ ✁ Definitional equality The typing of depends on the equations: This equations need to be true definitionally . An Introduction to Type Theory – p.13/32

  53. οΏ½ ✟ οΏ½ βœ† ✑ οΏ½ ✁ οΏ½ ✟ ✁ ✑ οΏ½ βœ† ✁ οΏ½ ✑ ✑ ✁ ✑ οΏ½ οΏ½ ✑ βœ„ βœ‚ ✞ ✁ οΏ½ ✁ οΏ½ Definitional equality The typing of depends on the equations: This equations need to be true definitionally . If we need we have to use propositional equality. An Introduction to Type Theory – p.13/32

  54. Propositional equality An Introduction to Type Theory – p.14/32

  55. βœ„ οΏ½ βœ„ ✁ οΏ½ ✁ βœ‚ βœ„ βœ„ ☎ οΏ½ οΏ½ βœ„ βœ„ βœ„ βœ‚ βœ„ οΏ½ βœ„ βœ„ ☎ βœ„ βœ‚ βœ„ Propositional equality data where An Introduction to Type Theory – p.14/32

  56. An Introduction to Type Theory – p.14/32 οΏ½ οΏ½ βœ† ✑ ✟ οΏ½ ☎ οΏ½ βœ‚ οΏ½ οΏ½ ✁ οΏ½ ✁ ✌ ☞ οΏ½ ☎ ✑ οΏ½ οΏ½ οΏ½ ✁ οΏ½ ✁ ✌ ☞ ✁ οΏ½ ✁ ✑ οΏ½ οΏ½ ✑ ☎ οΏ½ οΏ½ βœ‚ οΏ½ ✁ οΏ½ βœ‚ βœ„ ☎ ✁ οΏ½ ✁ βœ‚ βœ„ βœ„ βœ„ βœ„ οΏ½ οΏ½ βœ„ ☎ βœ‚ βœ„ οΏ½ ✑ βœ„ βœ„ οΏ½ οΏ½ οΏ½ οΏ½ ✑ βœ„ ✑ βœ‚ βœ‚ οΏ½ ✁ βœ‚ β˜› βœ„ ✑ βœ„ βœ„ βœ„ Propositional equality where data οΏ½βœ‚βœ let

  57. An Introduction to Type Theory – p.14/32 ✌ ✌ βœ‚ βœ„ ✁ οΏ½ οΏ½ βœ„ βœ„ οΏ½ ✁ οΏ½ ✁ ☞ βœ‚ ✁ οΏ½ ✁ οΏ½ ✑ οΏ½ ✑ ☎ οΏ½ οΏ½ βœ‚ οΏ½ ✁ ☎ βœ„ οΏ½ βœ† βœ‚ ✌ ☞ βœ‚ ✁ βœ† βœ„ ✁ οΏ½ ✁ οΏ½ ✁ ✟ ✁ ✁ ✟ οΏ½ ✁ βœ„ βœ‚ ✁ οΏ½ ✁ ✟ βœ† ✁ ✟ βœ„ οΏ½ οΏ½ ✑ βœ„ β˜› βœ„ ✑ βœ„ οΏ½ βœ„ βœ„ βœ„ ✁ οΏ½ ✁ βœ‚ βœ„ ✁ ☎ βœ„ οΏ½ οΏ½ βœ„ βœ‚ βœ„ οΏ½ βœ„ βœ„ ☎ βœ„ βœ‚ βœ‚ βœ‚ οΏ½ ✌ οΏ½ βœ† ✑ ✟ οΏ½ ☎ οΏ½ οΏ½ βœ‚ οΏ½ ✁ οΏ½ ✁ ☞ οΏ½ οΏ½ ✑ βœ„ ✑ οΏ½ οΏ½ ✑ βœ‚ οΏ½ οΏ½ ☎ Propositional equality where data οΏ½βœ‚βœ let let

  58. οΏ½ Problems with An Introduction to Type Theory – p.15/32

  59. οΏ½ Problems with Programs cluttered with coercions. An Introduction to Type Theory – p.15/32

  60. οΏ½ Problems with Programs cluttered with coercions. Programming requires theorem proving. An Introduction to Type Theory – p.15/32

  61. βœ„ ☎ ✝ οΏ½ βœ‚ ✁ οΏ½ βœ‚ οΏ½ βœ† βœ‚ οΏ½ βœ‚ βœ„ βœ„ βœ„ βœ‚ ✌ βœ‚ βœ„ ✁ βœ„ οΏ½ βœ„ οΏ½ οΏ½ ✁ ✁ Problems with Programs cluttered with coercions. Programming requires theorem proving. Equality on functions is not extensional, i.e. let cannot be derived. An Introduction to Type Theory – p.15/32

  62. Solutions ? An Introduction to Type Theory – p.16/32

Recommend


More recommend