Logical Types for Scheme Sam Tobin-Hochstadt PLT @ Northeastern - - PowerPoint PPT Presentation

logical types for scheme
SMART_READER_LITE
LIVE PREVIEW

Logical Types for Scheme Sam Tobin-Hochstadt PLT @ Northeastern - - PowerPoint PPT Presentation

Logical Types for Scheme Sam Tobin-Hochstadt PLT @ Northeastern University NEPLS, April 29, 2010 1 What do these languages have in common? COBOL Scheme Ruby Haskell 2 What do these languages have in common? COBOL


slide-1
SLIDE 1

Logical Types for Scheme

Sam Tobin-Hochstadt PLT @ Northeastern University NEPLS, April 29, 2010

1

slide-2
SLIDE 2

What do these languages have in common?

  • COBOL
  • Scheme
  • Ruby
  • Haskell

2

slide-3
SLIDE 3

What do these languages have in common?

  • COBOL [Komondoor 05]
  • Scheme [Tobin-Hochstadt 06]
  • Ruby [Furr 09]
  • Haskell [Vytiniotis 10]

New static checks

3

slide-4
SLIDE 4

What do these languages have in common?

  • COBOL [Komondoor 05]
  • Scheme [Tobin-Hochstadt 06]
  • Ruby [Furr 09]
  • Haskell [Vytiniotis 10]

Millions of lines of code

4

slide-5
SLIDE 5

Types for Existing Languages

5

slide-6
SLIDE 6

What’s Hard?

How programmers reason

6

slide-7
SLIDE 7

What’s Hard?

Simple Types How programmers reason

7

slide-8
SLIDE 8

What’s Hard?

Simple Types Reflection How programmers reason

8

slide-9
SLIDE 9

What’s Hard?

Simple Types Parametricity Reflection How programmers reason

9

slide-10
SLIDE 10

What’s Hard?

Simple Types Dependent Types Parametricity Reflection How programmers reason

10

slide-11
SLIDE 11

What’s Hard?

Simple Types Dependent Types Parametricity Reflection Generic Functions How programmers reason

11

slide-12
SLIDE 12

What’s Hard?

Simple Types Classes and Objects Dependent Types Parametricity Reflection Generic Functions How programmers reason

12

slide-13
SLIDE 13

Checking Existing Code

  • New static checking is valuable for existing code

Maintenance, Optimization, Trust

  • Work with existing idioms

Survey, Analyze, Design, Validate

13

slide-14
SLIDE 14

What Can We Learn?

  • New points in the design space

Ruby, Scheme, ...

  • New type system ideas

Occurrence Typing

14

slide-15
SLIDE 15

Occurrence Typing

15

slide-16
SLIDE 16

Simple Examples

#lang typed/scheme (: twice : Any -> Number) (define (twice x) (if (number? x) (* 2 x) 0))

16

slide-17
SLIDE 17

Simple Examples

#lang typed/scheme (: twice : Any -> Number) (define (twice x) (if (number? x) (* 2 x) 0)) Numberx

17

slide-18
SLIDE 18

Simple Examples

#lang typed/scheme (: twice : (U Number String) -> Number) (define (twice x) (if (number? x) (* 2 x) (* 2 (string-length x))))

18

slide-19
SLIDE 19

Simple Examples

#lang typed/scheme (: twice : (U Number String) -> Number) (define (twice x) (if (number? x) (* 2 x) (* 2 (string-length x)))) Numberx

19

slide-20
SLIDE 20

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(or (number? x) (string? x)) (twice x)] [else 0]))

20

slide-21
SLIDE 21

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(or (number? x) (string? x)) (twice x)] [else 0])) Numberx ∨ Stringx

21

slide-22
SLIDE 22

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(or (number? x) (string? x)) (twice x)] [else 0])) Numberx ∨ Stringx (U Number String)x

22

slide-23
SLIDE 23

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [else 0]))

23

slide-24
SLIDE 24

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [else 0])) Numberx ∧ Stringy

24

slide-25
SLIDE 25

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [(number? x) (* 2 y)] [else 0]))

25

slide-26
SLIDE 26

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [(number? x) (* 2 y)] [else 0])) Numberx ∨ Stringy

26

slide-27
SLIDE 27

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [(number? x) (* 2 y)] [else 0])) Numberx ∨ Stringy , Numberx Stringy

27

slide-28
SLIDE 28

Logical Combination

#lang typed/scheme (: twice : (U Number String) -> Number) (: g : Any (U Number String) -> Number) (define (g x y) (cond [(and (number? x) (string? y)) (+ (twice x) (twice y))] [(number? x) (* 2 y)] [else 0])) (U Number String)y , Stringy Numbery

28

slide-29
SLIDE 29

Data Structures

#lang typed/scheme (: twice-car : (Pair Any Any) -> Number) (define (twice-car x) (if (number? (car x)) (* 2 (car x)) 0))

29

slide-30
SLIDE 30

Data Structures

#lang typed/scheme (: twice-car : (Pair Any Any) -> Number) (define (twice-car x) (if (number? (car x)) (* 2 (car x)) 0)) Number_car(x)

30

slide-31
SLIDE 31

Abstraction

#lang typed/scheme (: car-num? : (Pair Any Any) -> Boolean : Number @ car) (define (car-num? x) (number? (car x)))

31

slide-32
SLIDE 32

Abstraction

#lang typed/scheme (: car-num? : (Pair Any Any) -> Boolean : Number @ car) (define (car-num? x) (number? (car x)))

32

slide-33
SLIDE 33

Propositional Logic

33

slide-34
SLIDE 34

Judgments

Γ e : T ; φ1 | φ2

34

slide-35
SLIDE 35

Judgments

Γ e : T ; φ1 | φ2 e ::= n | c | (λ x : T . e) | (e e) | (if e e e)

35

slide-36
SLIDE 36

Judgments

Γ e : T ; φ1 | φ2 T ::= Number | (U T ...) | #t | #f | (x:T -> T : φ|φ)

36

slide-37
SLIDE 37

Judgments

Γ e : T ; φ1 | φ2 φ ::= T_π(x) | T_π(x) | φ1 ∨ φ2 | φ1 ∧ φ2 | φ1 ⊃ φ2

37

slide-38
SLIDE 38

Judgments

Γ e : T ; φ1 | φ2 φ ::= T_π(x) | T_π(x) | φ1 ∨ φ2 | φ1 ∧ φ2 | φ1 ⊃ φ2

38

slide-39
SLIDE 39

Judgments

Γ e : T ; φ1 | φ2 Γ ::= T_π(x) ...

39

slide-40
SLIDE 40

Judgments

Γ e : T ; φ1 | φ2 Γ ::= φ ...

40

slide-41
SLIDE 41

Judgments

Γ φ

41

slide-42
SLIDE 42

Judgments

Γ φ Numberx ∨ Stringy , Numberx Stringy

42

slide-43
SLIDE 43

Typing

(if e1 e2 e3)

43

slide-44
SLIDE 44

Typing

(if e1 e2 e3) Γ e1 : T1 ; φ_+|φ_-

44

slide-45
SLIDE 45

Typing

(if e1 e2 e3) Γ e1 : T1 ; φ_+|φ_- Γ,φ_+ e2 : T ; φ1_+|φ1_- Γ,φ_- e3 : T ; φ2_+|φ2_-

45

slide-46
SLIDE 46

Typing

(if e1 e2 e3) Γ e1 : T1 ; φ_+|φ_- Γ,φ_+ e2 : T ; φ1_+|φ1_- Γ,φ_- e3 : T ; φ2_+|φ2_-

46

slide-47
SLIDE 47

Typing

Γ (if e1 e2 e3) : T ; φ1_+∨φ2_+ | φ1_-∨φ2_- Γ e1 : T1 ; φ_+|φ_- Γ,φ_+ e2 : T ; φ1_+|φ1_- Γ,φ_- e3 : T ; φ2_+|φ2_-

47

slide-48
SLIDE 48

Typing

Γ (if e1 e2 e3) : T ; φ1_+∨φ2_+ | φ1_-∨φ2_- Γ e1 : T1 ; φ_+|φ_- Γ,φ_+ e2 : T ; φ1_+|φ1_- Γ,φ_- e3 : T ; φ2_+|φ2_-

48

slide-49
SLIDE 49

Typing

Γ (if e1 e2 e3) : T ; φ1_+∨φ2_+ | φ1_-∨φ2_- Γ e1 : T1 ; φ_+|φ_- Γ,φ_+ e2 : T ; φ1_+|φ1_- Γ,φ_- e3 : T ; φ2_+|φ2_-

49

slide-50
SLIDE 50

Typing

Γ x : T

50

slide-51
SLIDE 51

Typing

Γ x : T Γ Tx

51

slide-52
SLIDE 52

Try Typed Scheme

Installer and Documentation http://www.plt-scheme.org

52

slide-53
SLIDE 53

Try Typed Scheme

Installer and Documentation http://www.plt-scheme.org

53