Type Theory 101

Type Theory For Absolute beginners

Hi! I'm Hanneli (@hannelita)

• Computer Engineer
• Programming
• Electronics
• Math <3 <3
• Physics
• Lego
• Meetups
• Animals
• Coffee
• Pokémon
• GIFs

#confoo  - @hannelita

Goals

Understand what is type theory about

Understand how can we jump from language analysis to mathematics (it is not magic)

Understand some benefits of this analysis

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

How do you choose a programming language?

• By company
• By popularity
• By team
• By deadline to deliver a project
• By project goal
• By available tools
• That was the only language I learned at school
• Somebody told me I should use that
• I really don't know

How often do you consider the following items when choosing a language?

• Type System
• Immutability
• Avoidance to runtime errors
• Verbosity
• Memory management

Wait - what is a type system?

```"In programming languages, a type
system is a collection of rules
that assign a property called
type to various constructs a
computer program consists of, such
as variables, expressions, functions
or modules"```

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

Wait - what is a type system?

Data

Operations

Strategies

• Generate a compile error
• Perform a type check before run the code
• Well defined error set
• Unpredictable  runtime errors
• Try implicit conversion
• A compiler tags pieces of code and tries to infer if the behaviour will be valid or not (before the program runs)
• A compiler / interpreter generates code to keep track of the data

Strategies

• Generate a compile error
• Perform a type check before run the code
• Well defined error set
• Unpredictable  runtime errors
• Try implicit conversion
• A compiler tags pieces of code and tries to infer if the behaviour will be valid or not (before the program runs)
• A compiler / interpreter generates code to keep track of the data

"Strong"

"Weak"

"Static"

"Dynamic"

* Definitions are not exact on literature

You don't have to choose only one alternative

Java: static (why?)

Python: dynamic

But how can we perform the 'type check' mentioned before?

Have you ever heard someone saying "Language X has a terrible type system, it is a total mess!" Why? What does it even mean? How can we prove that?

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

#1 - Example in Java:

extends        ==> extends ClassType

implements ==> implements InterfaceTypeList

throws          ==> throws ClassTypeList

#2 - Example in Java:

extends        ==> extends ClassType

implements ==> implements InterfaceTypeList

throws          ==> throws ClassTypeList

A        ==> ClassType

B        ==> InterfaceType(List)

C        ==> ClassType(List)

#2 - Example in Java:

ζ       ==> ClassType

(people like letters from the greek alphabet)

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

#4 - Example in Java

`http://www.jot.fm/issues/issue_2007_09/article3.pdf`
`( ::= is the definition symbol)`

#4

All mappings of a ClassType have a ClassDeclaration in Java (the same for interfaces). We will use the symbol

m

#4

Keep expanding the definitions:

`http://www.jot.fm/issues/issue_2007_09/article3.pdf`

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

#5 - Example in Java

validType = true

validType (primitive) = true

validType (π) = true

validType (environment, primitive) = true

validType (Γ, π) = true

validClass(Type) = ClassMap of the environment for that type

validClass(τ) = Γ classMap(τ)

validType(Class) =

validClass(Type)

validType(ζ) = validClass(ζ)

Free GIF!

#6 - Lambda Calculus

Understanding lambda calculus (out of scope of this presentation) will help you come out with these relations.

#6 - Bonus - Lambda Calculus

Lambda Calculus is about formal function theory. We can apply them to functional programming. We can also apply the ideas to general functions in programming.

• `http://www.cs.le.ac.uk/people/amurawski/mgs2011-tlc.pdf`

#6 Lambda Calculus

With Lambda Calculus we can define a Type itself

"A type is a collection of objects having similar structure"

`http://www.nuprl.org/book/Introduction_Type_Theory.html`

#6 Lambda Calculus

Functions can transform data

``public Integer nextInt(Integer number) { ... }``

A: Integer

A → A

#6 Lambda Calculus

Functions can transform data

``public Integer nextInt(Integer number) { ... }``

function: λx.x+1

That looks like mathematics!

#6 Lambda Calculus

λx.x+1 is in (A → A)

Lamba Calculus help us to build these statements, highly connected to predicate logic

#7 - Write some statements that you can prove:

"In Java, every class type that you define will be a subclass of a class"

#7 - Sketch a mathematical expression:

class => ζ

environment => Γ

class relation

(subclass or class itself) =>

#7 - Sketch a mathematical expression:

In an environment Γ,

Γ

we can prove

that a class of a

certain type

ζ1

ζ2

is a subclass of another type

or the other type itself (Object)

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

#8:

A valid class. A class type that is a subclass of another type

The super class of a type. But the super class also is a subclass of another type

#8:

A valid class. A class type that is a subclass of another type

The super class of a type. But the super class also is a subclass of another type

#8:

General subclass chain

A subclass or the class itself

Γ

ζ1

ζ2

Valid type!

validType(Γ, ζ)

Γ

ζ1

ζ2

True!

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

Why is this so important?

• Reduce runtime errors by checking the types
• IDEs can perform a better analysis of your code based on logical statements
• Different languages have different type systems
• You have a solid point to choose a language

Sometimes it is difficult to find an equivalent type across different languages

Examples:

• Is everything immutable here? (prove it)
• Is everything an object in language X? (prove it!)
• Do I have co-variance? (related to subtyping)

Agenda

• Choosing a programming language
• Quick intro about type systems
• Sketching the possible types
• Symbolic Logic analysis
• Predicate logic
• Getting there!
• Why is this important?
• Challenges

Challenges

• There is no single way to describe a type system
• It is hard to find equivalences between languages
• It is a lot of mathematics!
• We have lots of theory and very few time to study them

Challenges

• http://www.jot.fm/issues/issue_2007_09/article3.pdf
• http://www.dsi.unive.it/myths/GC2004/Slides/Zucca_slides.pdf
• http://groups.csail.mit.edu/pag/pubs/ref-immutability-oopsla2004-abstract.html
• http://pubs.doc.ic.ac.uk/JavaProbablySound/JavaProbablySound.pdf

Java type system - proposed type representations:

Final notes

Don't be scared of mathematics - the concepts, itself, are not so difficult!

There are several active researched focusing on Type Theory!

Even if you don't have a PhD, you can learn and use type theory concepts!

References

• http://blogs.atlassian.com/2013/01/covariance-and-contravariance-in-scala/
• http://cseweb.ucsd.edu/~atl017/papers/pldi11.pdf
• STEPANOV, A. Elements of Programming.
• PIERCE, B. Types and Programming Languages
• THOMPSON, S. Type Theory and Functional Programming (free ebook!)
• MICHAELSON, G. An Introduction to Functional Programming Through Lambda Calculus.

Session at Open Source Bridge 2016

http://slides.com/hannelitavante-hannelita/type-theory-101-35#/

Session at Devoxx Belgium 2016

http://slides.com/hannelitavante-hannelita/devoxx-be-notes-type-theory#/

Special Thanks

• B.C., for the constant review and support
• Professor M. Coutinho (UNIFEI)
• Devoxx Team

Thank you :)

Questions?

hannelita@gmail.com

@hannelita

Type Theory 101 - Confoo Vancouver 2016

By Hanneli Tavante (hannelita)

• 1,088