gradual typing with union and intersection types · gradual typing with union and intersection...

51
Motivating Example Types and Subtyping Function Types and Operators Conclusion Gradual Typing with Union and Intersection Types Giuseppe Castagna, Victor Lanvin ICFP ’17 September 6, 2017 1 / 14

Upload: others

Post on 24-Mar-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Gradual Typing with Union and Intersection Types

Giuseppe Castagna, Victor Lanvin

ICFP ’17

September 6, 2017

1 / 14

Page 2: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Outline

1 Motivating Example

2 Types and Subtyping

3 Function Types and Operators

4 Conclusion

1 / 14

Page 3: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (1/3)

[Siek and Vachharajani, 2008]

let succ : Int -> Int = ...let not : Bool -> Bool = ...

let f (condition : Bool) (x :

?

) :

?

=if condition then

succ xelse

not x

→ Cannot be typed with simple types, but valid with gradual types.→ What if we apply it to a string?

2 / 14

Page 4: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (1/3)

[Siek and Vachharajani, 2008]

let succ : Int -> Int = ...let not : Bool -> Bool = ...

let f (condition : Bool) (x : ?) : ? =if condition then

succ xelse

not x

→ Cannot be typed with simple types, but valid with gradual types.

→ What if we apply it to a string?

2 / 14

Page 5: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (1/3)

[Siek and Vachharajani, 2008]

let succ : Int -> Int = ...let not : Bool -> Bool = ...

let f (condition : Bool) (x : ?) : ? =if condition then

succ xelse

not x

→ Cannot be typed with simple types, but valid with gradual types.→ What if we apply it to a string?

2 / 14

Page 6: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (2/3)

Set-theoretic version:

let f (condition : Bool) (x : (Int | Bool)): (Int | Bool) =

if condition thenif x ∈ Int then succ x else assert false

elseif x ∈ Bool then not x else assert false

→ Syntactically heavy, but safe

3 / 14

Page 7: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (2/3)

Set-theoretic version:

let f (condition : Bool) (x : (Int | Bool)): (Int | Bool) =

if condition thenif x ∈ Int then succ x else assert false

elseif x ∈ Bool then not x else assert false

→ Syntactically heavy, but safe

3 / 14

Page 8: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (3/3)

Mixing the two:

let f (condition : Bool) (x : (Int | Bool) & ?): (Int | Bool) =

if condition thensucc x

elsenot x

→ Cannot be applied to something else than an integer or aboolean, and has a precise return type→ Syntactically straightforward

4 / 14

Page 9: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Motivating Example (3/3)

Mixing the two:

let f (condition : Bool) (x : (Int | Bool) & ?): (Int | Bool) =

if condition thensucc x

elsenot x

→ Cannot be applied to something else than an integer or aboolean, and has a precise return type→ Syntactically straightforward

4 / 14

Page 10: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Summary of the Motivations

– Gradualization of single expressions is sometimes too coarse

– Set-theoretic types are powerful but syntactically heavy (noreconstruction)

Mixing the two would:

– Make the transition between dynamic types and static typessmoother

– Reduce the syntactic overhead of set-theoretic types

5 / 14

Page 11: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Summary of the Motivations

– Gradualization of single expressions is sometimes too coarse

– Set-theoretic types are powerful but syntactically heavy (noreconstruction)

Mixing the two would:

– Make the transition between dynamic types and static typessmoother

– Reduce the syntactic overhead of set-theoretic types

5 / 14

Page 12: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Outline

1 Motivating Example

2 Types and Subtyping

3 Function Types and Operators

4 Conclusion

5 / 14

Page 13: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Syntax

t ∈ STypes ::= b | t → t | t ∨ t | t ∧ t | ¬t | Empty | Any

τ ∈ GTypes ::= ? | b | τ → τ | τ ∨ τ | τ ∧ τ | ¬t | Empty | Any

Note: ? 6= Any

Any = unknown type, explicitly deconstructed? = unknown type, implicitly deconstructed

6 / 14

Page 14: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Syntax

t ∈ STypes ::= b | t → t | t ∨ t | t ∧ t | ¬t | Empty | Any

τ ∈ GTypes ::= ? | b | τ → τ | τ ∨ τ | τ ∧ τ | ¬t | Empty | Any

Note: ? 6= Any

Any = unknown type, explicitly deconstructed? = unknown type, implicitly deconstructed

6 / 14

Page 15: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Concretization

First idea: apply AGT [Garcia et al., 2016]

We define a concretization function γ : GTypes→ P(STypes).

γ(?) = STypesγ(τ1 ∨ τ2) = {t1 ∨ t2 | ti ∈ γ(τi )}γ(τ1 → τ2) = {t1 → t2 | ti ∈ γ(τi )}

γ(b) = {b}etc...

For example,

γ((?→ Int)∧ ?) = {(t → Int) ∧ t ′ | (t, t ′) ∈ STypes2}

7 / 14

Page 16: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Concretization

First idea: apply AGT [Garcia et al., 2016]

We define a concretization function γ : GTypes→ P(STypes).

γ(?) = STypesγ(τ1 ∨ τ2) = {t1 ∨ t2 | ti ∈ γ(τi )}γ(τ1 → τ2) = {t1 → t2 | ti ∈ γ(τi )}

γ(b) = {b}etc...

For example,

γ((?→ Int)∧ ?) = {(t → Int) ∧ t ′ | (t, t ′) ∈ STypes2}

7 / 14

Page 17: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Concretization

First idea: apply AGT [Garcia et al., 2016]

We define a concretization function γ : GTypes→ P(STypes).

γ(?) = STypesγ(τ1 ∨ τ2) = {t1 ∨ t2 | ti ∈ γ(τi )}γ(τ1 → τ2) = {t1 → t2 | ti ∈ γ(τi )}

γ(b) = {b}etc...

For example,

γ((?→ Int)∧ ?) = {(t → Int) ∧ t ′ | (t, t ′) ∈ STypes2}

7 / 14

Page 18: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (1/2)

Consistent subtyping [Garcia et al., 2016]

σ ≤̃ τ ⇐⇒ ∃(s, t) ∈ γ(σ)× γ(τ), s ≤ t

However, we can show the existence of “extremal” concretizations:

∀t ∈ γ(τ), τ⇓ ≤ t ≤ τ⇑

(?→?)⇓ = (Any→ Empty) (?→?)⇑ = (Empty→ Any)

8 / 14

Page 19: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (1/2)

Consistent subtyping [Garcia et al., 2016]

σ ≤̃ τ ⇐⇒ ∃(s, t) ∈ γ(σ)× γ(τ), s ≤ t

However, we can show the existence of “extremal” concretizations:

∀t ∈ γ(τ), τ⇓ ≤ t ≤ τ⇑

(?→?)⇓ = (Any→ Empty) (?→?)⇑ = (Empty→ Any)

8 / 14

Page 20: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (1/2)

Consistent subtyping [Garcia et al., 2016]

σ ≤̃ τ ⇐⇒ ∃(s, t) ∈ γ(σ)× γ(τ), s ≤ t

However, we can show the existence of “extremal” concretizations:

∀t ∈ γ(τ), τ⇓ ≤ t ≤ τ⇑

(?→?)⇓ = (Any→ Empty) (?→?)⇑ = (Empty→ Any)

8 / 14

Page 21: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (2/2)

Consistent subtyping

σ ≤̃ τ ⇐⇒ σ⇓ ≤ τ⇑

=⇒ Consistent subtyping reduces in linear time to semanticsubtyping!

Note: emphasizes the fact that consistent subtyping is nottransitive.

9 / 14

Page 22: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (2/2)

Consistent subtyping

σ ≤̃ τ ⇐⇒ σ⇓ ≤ τ⇑

=⇒ Consistent subtyping reduces in linear time to semanticsubtyping!

Note: emphasizes the fact that consistent subtyping is nottransitive.

9 / 14

Page 23: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Subtyping (2/2)

Consistent subtyping

σ ≤̃ τ ⇐⇒ σ⇓ ≤ τ⇑

=⇒ Consistent subtyping reduces in linear time to semanticsubtyping!

Note: emphasizes the fact that consistent subtyping is nottransitive.

9 / 14

Page 24: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 25: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 26: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty}) =

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 27: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty}) =

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 28: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})

= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 29: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨

?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 30: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨ ?

α({Int ∨ Bool, Bool ∨ Int}) =

10 / 14

Page 31: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨ ?

α({Int ∨ Bool, Bool ∨ Int}) = ???

10 / 14

Page 32: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨ ?

α({Int ∨ Bool, Bool ∨ Int}) = ? ∨ ?

10 / 14

Page 33: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Type Semantics: Abstraction?

What about the abstraction function?

Problem: ∧ and ∨ are connectives, not constructors.

α({Int∨Bool,Int∨Int, Int∨Empty})

=

= α({Int, Int, Int}) ∨ α({Bool, Int, Empty})= Int ∨ ?

α({Int ∨ Bool, Bool ∨ Int}) = Int ∨ Bool

10 / 14

Page 34: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Outline

1 Motivating Example

2 Types and Subtyping

3 Function Types and Operators

4 Conclusion

10 / 14

Page 35: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens

We start from the usual rule:

Γ ` e1 : σ1 → τ1 Γ ` e2 : σ2 σ2 ≤̃ σ1

Γ ` e1e2 : τ1

Three components:

– Domain– Subtyping check– Result

11 / 14

Page 36: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens

We start from the usual rule:

Γ ` e1 : σ1 → τ1 Γ ` e2 : σ2 σ2 ≤̃ σ1

Γ ` e1e2 : τ1

Three components:– Domain

– Subtyping check– Result

11 / 14

Page 37: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens

We start from the usual rule:

Γ ` e1 : σ1 → τ1 Γ ` e2 : σ2 σ2 ≤̃ σ1

Γ ` e1e2 : τ1

Three components:– Domain– Subtyping check

– Result

11 / 14

Page 38: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens

We start from the usual rule:

Γ ` e1 : σ1 → τ1 Γ ` e2 : σ2 σ2 ≤̃ σ1

Γ ` e1e2 : τ1

Three components:– Domain– Subtyping check– Result

11 / 14

Page 39: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens Revisited

Problem: what is the domain of((Int→ Bool) ∧ ¬Int) ∨ (¬(Bool→ Int) ∧ (Int→ Int))?

Int

What is the result of((Int→ Bool) ∧ (Bool→ Int)) ∨ (Nat→ Nat) applied to Nat?

Nat ∨ Bool

Γ ` e1 : σ Γ ` e2 : τ τ ≤̃ d̃om(σ)

Γ ` e1e2 : σ ◦̃ τ

12 / 14

Page 40: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens Revisited

Problem: what is the domain of((Int→ Bool) ∧ ¬Int) ∨ (¬(Bool→ Int) ∧ (Int→ Int))?

Int

What is the result of((Int→ Bool) ∧ (Bool→ Int)) ∨ (Nat→ Nat) applied to Nat?

Nat ∨ Bool

Γ ` e1 : σ Γ ` e2 : τ τ ≤̃ d̃om(σ)

Γ ` e1e2 : σ ◦̃ τ

12 / 14

Page 41: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens Revisited

Problem: what is the domain of((Int→ Bool) ∧ ¬Int) ∨ (¬(Bool→ Int) ∧ (Int→ Int))?

Int

What is the result of((Int→ Bool) ∧ (Bool→ Int)) ∨ (Nat→ Nat) applied to Nat?

Nat ∨ Bool

Γ ` e1 : σ Γ ` e2 : τ τ ≤̃ d̃om(σ)

Γ ` e1e2 : σ ◦̃ τ

12 / 14

Page 42: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Typing Applications: Modus Ponens Revisited

Problem: what is the domain of((Int→ Bool) ∧ ¬Int) ∨ (¬(Bool→ Int) ∧ (Int→ Int))?

Int

What is the result of((Int→ Bool) ∧ (Bool→ Int)) ∨ (Nat→ Nat) applied to Nat?

Nat ∨ Bool

Γ ` e1 : σ Γ ` e2 : τ τ ≤̃ d̃om(σ)

Γ ` e1e2 : σ ◦̃ τ

12 / 14

Page 43: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) =

Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) =

Int

((?→ Int) ∧ (?→ Bool))◦̃Int =

Int ∨ Bool

13 / 14

Page 44: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) = Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) =

Int

((?→ Int) ∧ (?→ Bool))◦̃Int =

Int ∨ Bool

13 / 14

Page 45: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) = Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) =

Int

((?→ Int) ∧ (?→ Bool))◦̃Int =

Int ∨ Bool

13 / 14

Page 46: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) = Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) = Int

((?→ Int) ∧ (?→ Bool))◦̃Int =

Int ∨ Bool

13 / 14

Page 47: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) = Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) = Int

((?→ Int) ∧ (?→ Bool))◦̃Int =

Int ∨ Bool

13 / 14

Page 48: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Function Operators: Examples

d̃om((Int→ Int) ∧ (?→?)) = Any since it can accept any value

d̃om((Int→ Int) ∨ (?→?)) = Int

((?→ Int) ∧ (?→ Bool))◦̃Int = Int ∨ Bool

13 / 14

Page 49: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Outline

1 Motivating Example

2 Types and Subtyping

3 Function Types and Operators

4 Conclusion

13 / 14

Page 50: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Conclusion and Future Work

Current results:+ Efficient characterization of consistent subtyping+ Sound system+ Supports polymorphism (W.I.P.)– No blame theorem, and no gradual guarantee yet

Future work:– Provide a statically-typed cast-calculus and prove the gradual

guarantee– Study blame

14 / 14

Page 51: Gradual Typing with Union and Intersection Types · Gradual Typing with Union and Intersection Types GiuseppeCastagna,Victor Lanvin ICFP ’17 September6,2017 1/14. Motivating ExampleTypes

Motivating Example Types and Subtyping Function Types and Operators Conclusion

Conclusion and Future Work

Current results:+ Efficient characterization of consistent subtyping+ Sound system+ Supports polymorphism (W.I.P.)– No blame theorem, and no gradual guarantee yet

Future work:– Provide a statically-typed cast-calculus and prove the gradual

guarantee– Study blame

14 / 14