semantic solutions to program analysis problems · a talk in three parts. 1.a provocative claim....

31
Semantic Solutions to Program Analysis Problems Sam Tobin-Hochstadt and David Van Horn PLDI FIT 2011

Upload: others

Post on 11-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Semantic Solutions toProgram Analysis Problems

Sam Tobin-Hochstadt and David Van Horn

PLDI FIT 2011

Page 2: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

A talk in three parts.

1. A provocative claim. (The thought)

2. A idea about modular program analysis. (The idea)

3. And a demo! (The fun)

Page 3: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

The claim

Program analysis should focus on semantics

instead of focusing on abstraction.

−→ InterestingSemantics

−→ ComputableAnalysis

Page 4: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

The claim

Program analysis should focus on semanticsinstead of focusing on abstraction.

−→ InterestingSemantics

−→ ComputableAnalysis

Page 5: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

The claim

Program analysis should focus on semanticsinstead of focusing on abstraction.

−→ InterestingSemantics

−→ ComputableAnalysis

Page 6: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

The claim

Program analysis should focus on semanticsinstead of focusing on abstraction.

−→ InterestingSemantics

−→ ComputableAnalysis

Page 7: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Three reasons

Why focus on semantics?

1. Semantics is easier to get right

2. Off-the-shelf approximation techniques exist

3. Semantics by itself is interesting

Page 8: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Getting it wrong

CHAPTER 4. MODULES AND SIMPLE CONTRACTS 32

((!x!.e)"! v"v)"a !" e[v"v/x! ] subst

(n"n v"v)"a !" (blame ! R)"a app-error

(if0 0"0 e1 e2)" !" e1 if0-true

(if0 v"v e1 e2)" !" e2 if0-false

(int""!

f # n"n)"c !" n" int-int

(int""!

f # #v"v)"c !" (blame f R)"!

int-lam

((c1"c2)""!

f # #v"v)"c !" ((c1"̂c2)""!

f # #v"v )"c lam-lam

((c1"c2)""!

f # n"n)"c !" (blame f R)"!

lam-int

(((c1"̂c2)""!

f # #v"v )"c w"w)"a !" (c2# (#v"v (c1# w"w)L+(c1))L

!(c2))L+(c2) split-arrow

Figure 4.4: Reduction rules for the lambda calculus with modules and simplecontracts.

Expression evaluation contexts do not include contexts for contracts,

which are syntax, not values. The grammar for annotated programs guaran-

tees that contracts never show up outside a contract check.

The module context becomes relevant in only one situation:

. . . (module f! v)! . . . E [f!]

!" . . . (module f! v)! . . . E [v] lookup

The lookup rule replaces a reference to a module variable with its value.

Since all module-defined variable references are wrapped with contract checks

during the annotation phase, a contract check now surrounds the value v.

In Figure 4.4 we use n to represent again runtime integers, "v to represent

this time functions or functions with any number of blessed arrow contract

Page 9: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Getting it wrong

CHAPTER 4. MODULES AND SIMPLE CONTRACTS 41

P ::= E | MP

| (C⇐ E)�P

M ::= (module fβ V )�

V ::= n� | (λxβ.E)�

E ::= V | xβ | fβ | (E E)� | (if0 E E E)�

| C | (blame L R)�

C ::= int���

f | (C→C)���

f

L ::= f | µ | λ

Figure 4.7: Analyzed syntax for the lambda calculus with modules and simple

contracts.

Source�

Sink int�+

5 �−

5

h

n�n

int�+

1 �−

1

f

(λxβ.e�)�λ {�λ}⊆ϕ(�−5) ⇒ {�h,R�}⊆ψ(�−

5)

(c�+

1 �−

1g →c

�+

2 �−

2

f )�+

3 �−

3

f {�+3}⊆ϕ(�−

5) ⇒ {�h,R�}⊆ψ(�−

5)

Source�

Sink (e�5 e�6)�a (c�+

7 �−

7

i →c�+

8 �−

8

h )�+

5 �−

5

h

n�n {�n}⊆ϕ(�5) ⇒ {�λ,R�}⊆ψ(�a) {�n}⊆ϕ(�−5) ⇒ {�h,R�}⊆ψ(�−

5)

int�+

1 �−

1

f {�+1}⊆ϕ(�5) ⇒ {�λ,R�}⊆ψ(�a) {�+

1}⊆ϕ(�−

5) ⇒ {�h,R�}⊆ψ(�−

5)

(λxβ.e�)�λ

{�λ}⊆ϕ(�5) ⇒ ϕ(�6)⊆ϕ(β)

{�λ}⊆ϕ(�5) ⇒ ϕ(�)⊆ϕ(�a)

{�λ}⊆ϕ(�−5) ⇒ ϕ(�+

7)⊆ϕ(β)

{�λ}⊆ϕ(�−5) ⇒ ϕ(�)⊆ϕ(�−

8)

(c�+

1 �−

1g →c

�+

2 �−

2

f )�+

3 �−

3

f

{�+3}⊆ϕ(�5) ⇒ ϕ(�6)⊆ϕ(�−

1)

{�+3}⊆ϕ(�5) ⇒ ϕ(�+

2)⊆ϕ(�a)

{�+3}⊆ϕ(�−

5) ⇒ ϕ(�+

7)⊆ϕ(�−

1)

{�+3}⊆ϕ(�−

5) ⇒ ϕ(�+

2)⊆ϕ(�−

8)

Table 4.1: Constraints creation for the lambda calculus with modules and

simple contracts.

Page 10: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Getting it wrong

Source Sink int!+5 !!

5h !. . . e5 int

!+5 !!5

h "!+6 !!

6h any!

+5 !!

5h !. . . e5 any

!+5 !!5

h "!+6 !!

6h

n!ne1...

{!n}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

{!n}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

int!+1 !!

1f {!+1 }#"(!!

5 ) & {!h, O"}##(!!5 ) {!+1 }#"(!!

5 ) & {!h, O"}##(!!5 )

!. . . e1 int!+1 !!

1f "!

+2 !!

2f

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

any!+1 !!

1f

{!+1 }#"(!!5 ) & {!h, R"}##(!!

5 )

{!+1 }#"(!!5 ) & {!h, O"}##(!!

5 )

!. . . e1 any!+1 !!

1f "!

+2 !!

2f

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

($x! .e!)!!e1... {!"}#"(!!

5 ) & {!h, R"}##(!!5 )

{!"}#"(!!5 ) & "(!+5 )#"(%)

{!"}#"(!!5 ) & "(!)#"(!!

5 )

{!"}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

(c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f

{!+3 }#"(!!5 ) & {!h, R"}##(!!

5 )

{!+3 }#"(!!5 ) & {!h, O"}##(!!

5 )

{!+3 }#"(!!5 ) & "(!+5 )#"(!!

1 )

{!+3 }#"(!!5 ) & "(!+2 )#"(!!

5 )

!. . . e3 (c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f "!

+4 !!

4f {!+3 }#"(!!

5 )

e3 $% e5

& {!h, O"}##(!!5 )

Source Sink (e!5 e!6 )!a (c!+7 !!

7i 'c

!+8 !!8

h )!+5 !!

5h !. . . e5 (c

!+7 !!7

i 'c!+8 !!

8h )

!+5 !!5

h "!+6 !!

6h

n!ne1... {!n}#"(!5) & {!$, R"}##(!a) {!n}#"(!!

5 ) & {!h, R"}##(!!5 )

int!+1 !!

1f

{!+1 }#"(!5) & {!$, R"}##(!a) {!+1 }#"(!!5 ) & {!h, R"}##(!!

5 )!. . . e1 int

!+1 !!1

f "!+2 !!

2f

any!+1 !!

1f

!. . . e1 any!+1 !!

1f "!

+2 !!

2f

($x! .e!)!!e1...

{!"}#"(!5) & "(!6)#"(%)

{!"}#"(!5) & "(!)#"(!a)

{!"}#"(!!5 ) & "(!+7 )#"(%)

{!"}#"(!!5 ) & "(!)#"(!!

8 )

{!"}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

(c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f

{!+3 }#"(!5) & "(!6)#"(!!1 )

{!+3 }#"(!5) & "(!+2 )#"(!a)

{!+3 }#"(!!5 ) & {!h, O"}##(!!

5 )

{!+3 }#"(!!5 ) & "(!+7 )#"(!!

1 )

{!+3 }#"(!!5 ) & "(!+2 )#"(!!

8 )

!. . . e3 (c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f "!

+4 !!

4f {!+3 }#"(!!

5 )

e3 $% e5

& {!h, O"}##(!!5 )

Table 1. Constraints creation for source-sink pairs.

contract on the fly (with ! and !" fresh) and uses it to check the do-main and range of the function contract. For deeply nested functioncontracts, the process is repeated recursively thereby creating a wit-ness for each possible contract violation.5 In essence this processsimply makes explicit the sinks for the complex abstract values that

5 The debugger must then be careful to re-use the original any!+5 !!

5h contract

for both the domain and range of the new (any!+5 !!

5h 'any!

+5 !!

5h )!!

"h con-

tract because the use of new any contracts for the domain and range makesthe analysis fail to terminate when a function with a recursive type flows

into any!+5 !!

5h .

flow into any!+5 !!

5h . The analysis therefore remains sound. Here we

forsake this process and re-use the any!+5 !!

5h contract and its labels

only to simplify the soundness proof.

5.2.2 Blame ConstraintsThe third example explains blame assignment:

Source Sink (c!+7 !!

7i !c

!+8 !!

8h )

!+5 !!

5h

int!+1 !!

1f {!+

1 }""(!!5 ) # {$h, R%}"#(!!

5 )

225

Page 11: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Getting it wrong

Source Sink int!+5 !!

5h !. . . e5 int

!+5 !!5

h "!+6 !!

6h any!

+5 !!

5h !. . . e5 any

!+5 !!5

h "!+6 !!

6h

n!ne1...

{!n}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

{!n}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

int!+1 !!

1f {!+1 }#"(!!

5 ) & {!h, O"}##(!!5 ) {!+1 }#"(!!

5 ) & {!h, O"}##(!!5 )

!. . . e1 int!+1 !!

1f "!

+2 !!

2f

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

any!+1 !!

1f

{!+1 }#"(!!5 ) & {!h, R"}##(!!

5 )

{!+1 }#"(!!5 ) & {!h, O"}##(!!

5 )

!. . . e1 any!+1 !!

1f "!

+2 !!

2f

{!+1 }#"(!!5 )

e1 $% e5

& {!h, O"}##(!!5 )

($x! .e!)!!e1... {!"}#"(!!

5 ) & {!h, R"}##(!!5 )

{!"}#"(!!5 ) & "(!+5 )#"(%)

{!"}#"(!!5 ) & "(!)#"(!!

5 )

{!"}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

(c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f

{!+3 }#"(!!5 ) & {!h, R"}##(!!

5 )

{!+3 }#"(!!5 ) & {!h, O"}##(!!

5 )

{!+3 }#"(!!5 ) & "(!+5 )#"(!!

1 )

{!+3 }#"(!!5 ) & "(!+2 )#"(!!

5 )

!. . . e3 (c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f "!

+4 !!

4f {!+3 }#"(!!

5 )

e3 $% e5

& {!h, O"}##(!!5 )

Source Sink (e!5 e!6 )!a (c!+7 !!

7i 'c

!+8 !!8

h )!+5 !!

5h !. . . e5 (c

!+7 !!7

i 'c!+8 !!

8h )

!+5 !!5

h "!+6 !!

6h

n!ne1... {!n}#"(!5) & {!$, R"}##(!a) {!n}#"(!!

5 ) & {!h, R"}##(!!5 )

int!+1 !!

1f

{!+1 }#"(!5) & {!$, R"}##(!a) {!+1 }#"(!!5 ) & {!h, R"}##(!!

5 )!. . . e1 int

!+1 !!1

f "!+2 !!

2f

any!+1 !!

1f

!. . . e1 any!+1 !!

1f "!

+2 !!

2f

($x! .e!)!!e1...

{!"}#"(!5) & "(!6)#"(%)

{!"}#"(!5) & "(!)#"(!a)

{!"}#"(!!5 ) & "(!+7 )#"(%)

{!"}#"(!!5 ) & "(!)#"(!!

8 )

{!"}#"(!!5 )

e1 . . . $% e5

& {!h, O"}##(!!5 )

(c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f

{!+3 }#"(!5) & "(!6)#"(!!1 )

{!+3 }#"(!5) & "(!+2 )#"(!a)

{!+3 }#"(!!5 ) & {!h, O"}##(!!

5 )

{!+3 }#"(!!5 ) & "(!+7 )#"(!!

1 )

{!+3 }#"(!!5 ) & "(!+2 )#"(!!

8 )

!. . . e3 (c!+1 !!

1g 'c

!+2 !!2

f )!+3 !!

3f "!

+4 !!

4f {!+3 }#"(!!

5 )

e3 $% e5

& {!h, O"}##(!!5 )

Table 1. Constraints creation for source-sink pairs.

contract on the fly (with ! and !" fresh) and uses it to check the do-main and range of the function contract. For deeply nested functioncontracts, the process is repeated recursively thereby creating a wit-ness for each possible contract violation.5 In essence this processsimply makes explicit the sinks for the complex abstract values that

5 The debugger must then be careful to re-use the original any!+5 !!

5h contract

for both the domain and range of the new (any!+5 !!

5h 'any!

+5 !!

5h )!!

"h con-

tract because the use of new any contracts for the domain and range makesthe analysis fail to terminate when a function with a recursive type flows

into any!+5 !!

5h .

flow into any!+5 !!

5h . The analysis therefore remains sound. Here we

forsake this process and re-use the any!+5 !!

5h contract and its labels

only to simplify the soundness proof.

5.2.2 Blame ConstraintsThe third example explains blame assignment:

Source Sink (c!+7 !!

7i !c

!+8 !!

8h )

!+5 !!

5h

int!+1 !!

1f {!+

1 }""(!!5 ) # {$h, R%}"#(!!

5 )

225

Page 12: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

The shelf

Generic abstraction techniques exist.

I Nielsen, Nielsen, and Hankin, ’99

I Cousot, ’02

I Van Horn and Might, ’10: Abstracting Abstract Machines

September 27–29, 2010Baltimore, Maryland, USA

Sponsored by:

ACM SIGPLANSupported by:

CreditSuisse, Erlang Solutions, Galois, Jane Street Capital,Microsoft Research, Standard Chartered

ICFP’10Proceedings of the 2010 ACM SIGPLAN

International Conference on Functional Programming

Page 13: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Semantics as verification

Once you have a semantics that answers interesting questions,try running it.

Page 14: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

A Modular Semantics

Page 15: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Modularity matters.

Page 16: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Modularity of analysis matters.

Page 17: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Modularity matters.

I Some programs are open (c.f.: the web).

// dynamically load any javascript file.load.getScript = function(filename) {

var script = document.createElement(’script’)script.setAttribute("type","text/javascript")script.setAttribute("src", filename)if (typeof script!="undefined")document.getElementsByTagName("head")[0]

.appendChild(script)}

Page 18: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Modularity matters.

I Good components are written in bad languages.

#include "escheme.h"Scheme_Object *scheme_initialize(Scheme_Env *env) {

Scheme_Env *mod_env;mod_env = scheme_primitive_module(scheme_intern_symbol("hi"),

env);scheme_add_global("greeting",

scheme_make_utf8_string("hello"),mod_env);

scheme_finish_primitive_module(mod_env);return scheme_void;

}

Scheme_Object *scheme_reload(Scheme_Env *env) {return scheme_initialize(env); /* Nothing special for reload */

}

Scheme_Object *scheme_module_name() {return scheme_intern_symbol("hi");

}

Page 19: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Modularity matters.

I Libraries matter.

;; To use: (require (planet dvanhorn/ralist));; Purely Functional Random-Access Lists.;; Implementation based on Okasaki, FPCA ’95.#lang racket(provide (all-defined-out))

(struct tree (val))(struct (leaf tree) ())(struct (node tree) (left right))

;; X [RaListof X] -> [RaListof X](define (ra:cons x ls)(match ls

[(list-rest (cons s t1) (cons s t2) r)(cons (cons (+ 1 s s) (make-node x t1 t2)) r)][else(cons (cons 1 (make-leaf x)) ls)]))

...

Page 20: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

An idea:

reduction semantics + abstract values= abstract reduction semantics

(λx .E ) V � {V /x}E

(λx .E ) : A→ B(A→ B) V � B

Page 21: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

An idea:

reduction semantics + abstract values= abstract reduction semantics

(λx .E ) V � {V /x}E

(λx .E ) : A→ B(A→ B) V � B

Page 22: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

An idea:

reduction semantics + abstract values= abstract reduction semantics

(λx .E ) V � {V /x}E(λx .E ) : A→ B

(A→ B) V � B

Page 23: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

An idea:

reduction semantics + abstract values= abstract reduction semantics

(λx .E ) V � {V /x}E(λx .E ) : A→ B

(A→ B) V � B

Page 24: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module fact (int/c -> int/c)

(lambda (x)

(if (= x 0)

1

(* x (fact (sub1 x))))))

(module input int/c 0)

(fact input)

�∗ ((lambda (x) ...) 0)

�∗ 1

�∗

Page 25: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module fact (int/c -> int/c)

•)

(module input int/c 0)

(fact input)

�∗ ((int/c -> int/c) 0)

�∗ int/c

�∗

Page 26: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module fact (int/c -> int/c)

(lambda (x)

(if (= x 0)

1

(* x (fact (sub1 x))))))

(module input int/c •)

(fact input)

�∗ ((lambda (x) ...) int/c) �∗ (if (= int/c 0) 0 ...)

�∗ (if bool 1 ...)

�∗ 1, int/c

Page 27: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module * (int/c int/c -> int/c) •)(module sub1 (int/c -> int/c) •)(module fact (int/c -> int/c)

(lambda (x)

(if (= x 0)

1

(* x (fact (sub1 x))))))

(module input int/c 0)

(fact input)

�∗ ((lambda (x) ...) 0)

�∗ 1

�∗

Page 28: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module * (int/c int/c -> int/c) •)(module sub1 (int/c -> int/c) •)(module fact (int/c -> int/c)

(lambda (x)

(if (= x 0)

1

(* x (fact (sub1 x))))))

(module input int/c •)

(fact input)

�∗ ((lambda (x) ...) int/c)

�∗ int/c

�∗

Page 29: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

(module * (any/c any/c -> int/c) •)(module sub1 (any/c -> int/c) •)(module fact any/c

(lambda (x)

(if (= x 0)

1

(* x (fact (sub1 x))))))

(module input int/c •)

(fact input)

�∗ ((lambda (x) ...) int/c)

�∗ int/c

�∗

Page 30: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

Demo

Page 31: Semantic Solutions to Program Analysis Problems · A talk in three parts. 1.A provocative claim. (The thought) 2.A idea about modular program analysis. (The idea) 3.And a demo! (The

I Focus on semantics.

I Abstract reduction provides modularity.

I A semantics can be a verifier.

http://bit.ly/abstract-reduction

http://redex.racket-lang.org