Partial

Evaluation

of

Higher-Order

Natural-Semantics

Derivations

Husain

I.

Ibraheem

and

David

A.

Schmidt

Kansas

State

University

Abstract

We

use

on-line

partial-evaluation

technology

to

generate

partial

derivations

from

natural

-LRB-

big-step

-RRB-

semantics

definitions

First

we

reformat

the

big-step

rules

into

a

small-step

form

and

we

extend

big-step

semantics

to

be

higher-order

that

is

we

allow

data

structures

like

closures

to

contain

partial

derivations

Next

we

apply

a

supercompilation

algorithm

to

the

transformed

semantics

thereby

producing

partial

derivations

for

programs

and

exposing

the

programs

control

structures

The

resulting

system

can

perform

static

analysis

on

incomplete

or

modular

programs

and

can

do

double

duty

as

a

link-time

static

analyzer

these

are

significant

steps

towards

modular

program

analysis

Introduction

Perhaps

the

most

general

form

of

declarative

language

is

a

deductive

operational

semantics

framework

since

the

semantics

of

other

languages

can

be

encoded

within

deductive

operational

semantics

in

side-effect-free

fashion

Big-step

-LRB-

natural

-LSB-

-RSB-

-RRB-

semantics

definitions

are

particularly

attractive

because

their

semicompositional

structure

lends

itself

to

compact

understandable

derivations

-LSB-

-RSB-

Such

derivations

are

facilitated

even

more

by

the

inherent

two-dimensional

nature

of

big-step

semantics

derivations

and

its

use

of

both

inherited

-LRB-

downwards

flowing

-RRB-

and

synthesized

-LRB-

upwards

flowing

-RRB-

attributes

However

the

latter

characteristics

do

not

suit

on-line

partial

algorithms

that

are

oriented

towards

a

term-rewriting

-LRB-

small-step

-RRB-

framework

e.g.

-LSB-

-RSB-

And

simulations

of

two-dimensional

big-step

derivations

by

term

rewriting

on

one-dimensional

representations

destroy

the

beauty

and

many

of

the

advantages

of

the

big-step

framework

-LSB-

-RSB-

In

this

paper

we

develop

an

on-line

partial

evaluator

that

lets

a

big-step

semantics

be

evaluated

in

two-dimensional

small-step

style

in

the

spirit

of

Jones

-LSB-

-RSB-

and

Stoughton

-LSB-

-RSB-

Also

we

extend

big-step

semantics

so

that

data-structure

values

-LRB-

e.g.

closures

and

Computing

and

Information

Sciences

Department

Nichols

Hall

Manhattan

KS

USA

schmidt@cis.ksu.edu

Phone

Fax

Ibraheem

is

supported

by

a

Kuwait

University

scholarship

Schmidt

is

supported

by

an

NSF

use

partial

evaluation

in

a

general

sense

to

denote

techniques

achieving

the

effect

of

specialization

e.g.

supercompilation

deforestation

partial

deduction

etc.

continuations

-RRB-

can

hold

partial

subderivations

The

result

is

a

term-rewriting

secondorder

big-step

semantics

variant

that

is

well

suited

for

on-line

partial

evaluation

We

demonstrate

the

transformation

techniques

on

the

big-step

semantics

of

a

higherorder

functional

language

and

we

use

Gl?uck

and

Sorensen

's

supercompilation

algorithm

-LSB-

-RSB-

to

partially

evaluate

derivations

of

functional

programs

Indeed

an

extension

of

the

example

language

and

partial

evaluator

have

been

implemented

in

Sictus

Prolog

and

have

been

applied

to

a

variety

of

standard

examples

Our

motivations

for

these

efforts

are

two-fold

ffl

We

desire

a

semantically

sound

and

general

technique

for

exposing

the

semantic

control-flow

graph

of

a

program

much

like

that

employed

by

Gallagher

and

Lafave

-LSB-

-RSB-

so

that

static

analysis

-LRB-

especially

abstract

interpretation

-LSB-

-RSB-

and

model

checking

-LSB-

-RSB-

-RRB-

can

be

conducted

on

top

of

the

resulting

graph

ffl

We

desire

a

foolproof

methodology

for

incremental

static

analysis

along

the

lines

of

Codish

Debray

and

Giacobazzi

-LSB-

-RSB-

where

incomplete

or

modular

programs

can

be

analyzed

as

best

as

possible

and

the

residuals

of

the

partially

analyzed

programs

can

be

combined

and

further

analyzed

at

link-time

stages

Only

the

combination

of

a

program-point-based

operational

semantics

and

an

on-line

partial-evaluation-based

analysis

engine

appears

to

be

general

enough

to

meet

our

needs

In

the

remainder

of

the

paper

we

describe

our

transformations

on

big-step

semantics

definitions

we

review

fundamentals

of

process-tree-based

supercompilation

and

we

present

an

example

of

supercompilation

of

semantic

derivations

We

finish

with

a

few

remarks

regarding

the

status

of

the

implementation

Big-Step

Semantics

in

Small-Step

Format

The

usual

reading

of

a

Kahn-style

big-step

-LRB-

natural

-RRB-

semantics

definition

-LSB-

-RSB-

states

that

formulas

are

triples

ae

e

v

where

ae

Environment

e

Expression

and

v

Value

A

derivation

is

an

inductively

defined

tree

of

such

triples

Unfortunately

this

interpretation

prohibits

reasoning

about

divergent

computations

and

it

also

limits

the

application

of

on-line

partial-evaluation

algorithms

which

are

oriented

towards

termrewriting

or

small-step

systems

-LSB-

-RSB-

rather

than

attribute-grammar-like

big-step

systems

In

this

paper

we

view

the

triple

ae

e

v

intuitively

as

it

was

once

intended

The

pair

ae

e

converges

in

some

sequence

of

rewriting

steps

to

v

that

is

-LRB-

ae

e

-RRB-

v.

Therefore

a

derivation

starting

from

ae

e

consists

of

multiple

small

steps

that

either

converge

to

v

or

diverge

Given

this

view

we

see

that

a

unique

aspect

of

big-step

semantics

is

the

twodimensional

topology

in

which

the

small

steps

are

arranged

For

example

the

com

putation

of

ae

-LRB-

-RRB-

into

goes

ae

-LRB-

-RRB-

ae

ae

-LRB-

-RRB-

ae

ae

Underneath

the

parent

expression

-LRB-

-RRB-

one

finds

both

the

steps

for

the

structural

derivations

for

and

as

well

as

the

value

Those

arrows

of

form

v

for

v

Value

-LRB-

e.g.

-RRB-

are

called

value

arrows

Frankly

it

does

not

matter

how

the

value

arrows

are

positioned

so

we

draw

them

branching

downwards

from

their

parent

sequents

thus

the

rightmost

arrow

of

a

convergent

derivation

must

be

a

value

arrow

Our

job

is

to

generate

on-line

-LRB-

with

partial

evaluation

-RRB-

derivations

like

the

one

above

we

do

so

incrementally

adding

new

nodes

of

the

forms

ae

e

and

v

to

the

derivation

tree

step

by

step

A

big-step

inference

rule

such

as

ae

ae

ae

plus

-LRB-

-RRB-

encodes

two

rewriting

rules

which

we

might

write

diagrammatically

as

follows

plus

-LRB-

-RRB-

ae

ae

ae

ae

ae

ae

These

two

rules

are

rewriting

rules

upon

trees

rather

than

sequents

hence

the

tree

structure

must

be

explicit

-LSB-

-RSB-

The

notation

d

v

asserts

that

derivation

d

converges

and

the

value

arrow

attached

to

its

root

points

to

v

These

rules

were

used

to

derive

the

tree

for

ae

-LRB-

-RRB-

seen

earlier

The

resemblance

of

these

rules

to

the

reduction

strategies

used

by

Horn-clause

programming

-LSB-

-RSB-

and

Typol/Centaur

-LSB-

-RSB-

is

obvious

but

note

the

handling

of

synthesized

attributes

in

the

second

rule

there

are

no

substitutions

or

unifications

and

once

a

node

is

added

to

the

derivation

it

stays

unchanged

Higher-Order

Derivations

Big-step

semantics

is

inherently

first-order

Closure

and

continuation

values

are

inert

data

structures

rather

than

enabled

potential

derivations

For

example

it

is

impossible

to

employ

the

usual

big-step

rule

for

lambda

abstraction

ae

x

e

hae

x

ei

to

derive

ae

x

x

-LRB-

-RRB-

hae

x

x

because

the

closure

is

inert

To

alleviate

this

problem

we

allow

derivations

to

appear

within

data-structure

values

like

closures

Given

that

the

pair

ae

e

is

a

simple

example

of

-LRB-

an

incomplete

-RRB-

derivation

we

revise

the

above

semantics

rule

to

the

following

ae

x

e

A

-LRB-

ae

-LRB-

x

A

-RRB-

e

-RRB-

That

is

a

closure

is

a

mapping

from

an

argument

A

to

a

-LRB-

possibly

incomplete

-RRB-

derivation

Figure

gives

the

syntax

and

big-step

rules

we

use

for

a

small

functional

language

with

recursive

lambda-abstractions

Remember

that

the

notation

d

v

should

be

e

Expression

e

x

j

rec

f

x

e

j

x

f

Identifier

d

Derivation

d

v

j

dn

d

ae

e

n

ae

Environment

ae

-LSB-

x

vx

-RSB-

v

Value

v

A

d

j

A

A

MetaVariable

ae

x

aex

ae

rec

f

x

e

c

where

c

A

ae

-LRB-

f

c

-RRB-

-LRB-

x

A

-RRB-

e

ae

A

d

ae

-LSB-

A

-RSB-

d

v

ae

v

Figure

Big-step

semantics

for

functional

language

read

as

derivation

d

converges

and

its

value

arrow

points

to

v.

The

inference

rule

for

function

application

encodes

these

three

rewriting

rules

ae

ae

ae

ae

ae

-LSB-

A

-RSB-

ae

A

A

d

v

vd

vd

ae

ae

The

usual

implementation

of

the

semantics

in

Figure

evaluates

a

derivation

to

weak

normal

form

bodies

of

closures

are

not

evaluated

until

an

argument

is

available

This

is

shown

in

Figure

-LRB-

a

-RRB-

But

the

mechanisms

now

exist

to

evaluate

closure

bodies

if

desired

this

is

seen

in

Figure

-LRB-

b

-RRB-

where

the

closure

body

f@x,

is

developed

The

latter

derivation

is

potentially

infinite

but

the

overall

derivation

has

a

value

nonetheless

and

the

rewriting

rules

are

confluent

Since

we

can

conduct

small-step-style

computations

of

big-step

derivations

and

we

can

evaluate

closure

bodies

we

next

apply

a

partial-evaluation

methodology

to

our

system

have

proved

a

congruence

theorem

that

shows

that

derivations

in

the

higher-order

semantics

are

the

same

as

those

in

the

classical

semantics

up

to

the

forgetting

of

the

subderivations

within

the

closure

bodies

-LRB-

rec

f

x

x

-RRB-

c

A

x

rec

f

x

x

x

where

-LRB-

f

c

-RRB-

-LRB-

x

A

-RRB-

and

-LSB-

A

-RSB-

-LRB-

a

-RRB-

rec

f

x:f@x

x

Ac

c

A

f@x

f@x

f

where

-LRB-

f

c

-RRB-

-LRB-

x

A

-RRB-

-LRB-

b

-RRB-

Figure

Example

derivations

Partial

deductions

using

supercompilation

As

hinted

by

Figure

-LRB-

b

-RRB-

partial

evaluation

might

be

used

to

generate

nontrivial

derivation-tree

structure

in

the

presence

of

unknowns

We

have

found

Gl?uck

and

Sorensen

's

formulation

-LSB-

-RSB-

of

Turchin

's

supercompilation

algorithms

-LSB-

-RSB-

useful

because

it

performs

specialization

and

deforestation

simultaneously

on-line

-LSB-

-RSB-

Here

is

short

review

of

the

framework

as

presented

in

-LSB-

-RSB-

A

source

program

consists

of

a

set

of

first-order

equationally

defined

functions

and

an

expression

to

be

simplified

The

supercompilation

algorithm

expands

the

expression

by

unfolding

and

specializing

until

there

is

danger

of

an

infinite

expansion

Then

a

fold

a

generalization

or

a

split

is

performed

to

prevent

divergence

To

monitor

the

expression

's

expansion

a

trace

called

a

process

tree

is

maintained

Figure

-LRB-

a

-RRB-

shows

an

incomplete

process

tree

for

a

small

program

If

a

newly

created

Program

f

-LRB-

x

-RRB-

g

-LRB-

x

-RRB-

g

-LRB-

y

-RRB-

f

-LRB-

s

y

-RRB-

g

-LRB-

s

x

y

-RRB-

g

-LRB-

x

s

y

-RRB-

in

f

-LRB-

A

-RRB-

Process

tree

f

-LRB-

A

-RRB-

g

-LRB-

A

-RRB-

f

-LRB-

s

-RRB-

g

-LRB-

B

s

-RRB-

A

sBA

-LRB-

a

-RRB-

unfold

specialize

g

-LRB-

A

-RRB-

A

sBA

-LRB-

A

-RRB-

f

-LRB-

A

-RRB-

-LRB-

s

-RRB-

g

-LRB-

B

s

-RRB-

Fold

f

-LRB-

s

-RRB-

is

an

instance

of

f

-LRB-

A

-RRB-

-LRB-

f

-LRB-

A

-RRB-

-RRB-

f

-LRB-

s

-RRB-

where

-LRB-

A

s

-RRB-

Label

is

created

at

the

fold

point

-LRB-

b

-RRB-

Figure

Process

tree

and

a

fold

step

leaf

is

an

instance

of

a

node

seen

earlier

in

the

path

to

the

leaf

then

a

fold

must

occur

Figure

-LRB-

b

-RRB-

shows

a

fold

If

a

node

in

a

path

does

not

instantiate

to

but

is

nonetheless

embedded

within

a

newly

created

leaf

then

a

generalization

is

necessary

Figure

-LRB-

a

-RRB-

shows

a

generalization

notice

how

part

of

the

process

tree

is

removed

and

replaced

by

the

let-node

Finally

a

split

can

arise

if

a

node

embeds

into

a

leaf

in

such

a

way

that

-LRB-

A

-RRB-

f

-LRB-

A

-RRB-

let

C

in

g

-LRB-

A

C

-RRB-

Generalize

g

-LRB-

A

-RRB-

embeds

in

g

-LRB-

B

s

-RRB-

Choose

g

-LRB-

A

C

-RRB-

as

the

generalization

because

-LRB-

g

-LRB-

A

C

-RRB-

-RRB-

g

-LRB-

A

-RRB-

where

-LRB-

C

-RRB-

and

-LRB-

g

-LRB-

A

C

-RRB-

-RRB-

g

-LRB-

B

s

-RRB-

where

-LRB-

A

B

C

s

-RRB-

-LRB-

a

-RRB-

A

sDA

-LRB-

s

C

-RRB-

-LRB-

D

s

C

-RRB-

-LRB-

A

-RRB-

f

-LRB-

A

-RRB-

let

C

in

-LRB-

A

C

-RRB-

g

-LRB-

A

C

-RRB-

Residual

program

f

-LRB-

A

-RRB-

is

-LRB-

A

-RRB-

where

-LRB-

A

-RRB-

let

C

in

-LRB-

A

C

-RRB-

-LRB-

C

-RRB-

-LRB-

s

C

-RRB-

-LRB-

s

D

C

-RRB-

-LRB-

D

s

C

-RRB-

-LRB-

b

-RRB-

Figure

Generalization

step

and

results

of

supercompilation

there

is

no

common

superstructure

Since

we

do

not

use

splits

in

our

system

we

will

not

develop

them

here

The

process

tree

that

results

from

the

small

example

is

displayed

in

Figure

-LRB-

b

-RRB-

unfolding

steps

are

collapsed

and

specializations

folds

and

generalizations

generate

residual

code

Since

the

example

is

deliberately

pathological

the

residual

program

is

a

mere

copy

of

the

original

When

an

embedding

arises

one

says

that

a

whistle

has

blown

The

whistle

temporarily

suspends

computation

while

the

process

tree

is

repaired

with

a

fold

or

generalization

Gl?uck

and

Sorensen

proved

that

the

repairs

motivated

by

the

whistle

ensure

termination

of

process

tree

creation

The

key

technical

result

is

due

to

Kruskal

who

observed

that

any

infinite

term

rewriting

sequence

ti

must

contain

two

terms

tj

tk

j

k

such

that

tj

embeds

in

tk

written

tj

tk

-LSB-

-RSB-

The

definition

of

term

embedding

is

given

in

Figure

Variables

Diving

Coupling

A

s

ti

s

h

-LRB-

ti

tn

-RRB-

sn

tn

h

-LRB-

sn

-RRB-

h

-LRB-

tn

-RRB-

Figure

Definition

of

term

embedding

Although

a

process

tree

looks

like

a

big-step

semantics

derivation

it

differs

because

it

is

a

history

of

all

the

program

configurations

that

appeared

starting

from

the

initial

one

Therefore

a

process

tree

for

a

big-step

semantics

derivation

should

be

a

tree

of

derivation

trees

But

such

a

process

tree

would

be

too

ungainly

to

implement

and

it

ignores

the

crucial

feature

that

a

big-step

derivation

grows

monotonically

that

is

nodes

are

added

to

the

derivation

and

are

ever

rearranged

or

removed

Because

of

the

latter

property

the

derivation

itself

can

serve

as

the

process

tree

and

the

whistle

criterion

can

be

applied

to

the

derivation

's

nodes

namely

sequents

of

the

form

ae

e

Yet

another

benefit

of

big-step

semantics

definitions

is

that

they

are

semicompositional

that

is

the

e-component

of

every

sequent

ae

e

is

a

subphrase

of

the

program

that

appears

in

the

root

node

sequent

Hence

there

are

at

most

finitely

many

distinct

such

e

and

it

follows

that

the

whistle

need

blow

only

when

one

encounters

a

leaf

aei

ei

and

in

the

path

that

leads

to

the

leaf

there

exists

a

node

ae

ei

such

that

ae

aei

An

Example

We

now

apply

the

supercompilation

methodology

on

a

small

program

Figure

provides

semantics

rules

for

unary

arithmetic

-LRB-

where

is

the

successor

of

v

-RRB-

Given

these

rules

ae

e

v

ae

s

e

ae

ae

v

ae

v

ae

ae

v

ae

v

Figure

Rules

for

successor

and

conditional

the

process

tree/derivation

for

the

program

rec

f

x

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

begins

as

seen

in

Figure

-LRB-

a

-RRB-

We

employ

the

equivalent

of

leftmost-outermost

evaluation

hence

we

attempt

to

evaluate

the

body

of

the

closure

c

Since

the

test

can

not

be

decided

we

could

halt

at

this

point

with

an

uninteresting

residual

derivation

But

it

proves

more

useful

to

construct

a

residual

if-node

denoted

by

and

drive

into

the

arms

of

the

conditional

Thus

the

small-step

rules

are

enriched

with

residuals

for

each

of

the

operators

in

the

source

as

intermediate

values

The

result

appears

in

Figure

-LRB-

b

-RRB-

where

a

fold

point

named

has

been

introduced

Next

consider

the

simple

partial

derivation

of

in

Figure

-LRB-

a

-RRB-

One

might

specialize

the

leftmost

leaf

but

the

result

displayed

in

Figure

-LRB-

b

-RRB-

introduces

only

a

residual

substitution

When

we

instantiate

F

in

Figure

-LRB-

b

-RRB-

by

the

residual

derivation

from

Figure

-LRB-

b

-RRB-

we

obtain

the

derivation

in

Figure

Now

that

the

two

programs

are

linked

together

partial

evaluation

can

proceed

further

The

residual

can

be

executed

it

selects

the

else-arm

and

the

fold

point

-LRB-

-RRB-

term

is

due

to

Neil

Jones

-LSB-

-RSB-

definition

of

is

extended

pointwise

for

environments

which

is

safe

because

the

number

of

identifiers

in

a

given

program

must

be

finite

Let

aeff

ae

-LRB-

f

c

-RRB-

-LRB-

x

ff

-RRB-

in

the

following

ae

rec

f

x

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

A

aeA

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

aeA

x

A

-LRB-

a

-RRB-

ae

rec

f

x

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

aeA

x

A

x

f

-LRB-

s

x

-RRB-

f

-LRB-

b

-RRB-

A

-LRB-

-RRB-

s

x

A

c

x

c

A

-LRB-

A

-RRB-

aeA

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

Figure

Partial

evaluation

of

rec

f

x

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

Let

-LRB-

f

F

-RRB-

f

F

-LRB-

a

-RRB-

f

-LSB-

A

-RSB-

d

-LRB-

b

-RRB-

F

A

d

Figure

Partial

evaluation

of

immediately

unfolds

to

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

which

blows

the

whistle

since

this

new

leaf

can

be

generalized

with

its

ancestor

node

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

The

subtree

whose

root

is

the

latter

sequent

is

removed

and

replaced

by

the

generalization

node

let

C

in

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

Driving

restarts

from

the

generalization

node

The

unfolding

that

follows

builds

the

tree

in

Figure

where

a

new

fold

point

terminates

the

driving

The

final

derivation

exposes

program

's

control

structure

without

compromising

its

data

flow

and

indicates

that

only

the

else-arm

of

the

conditional

is

utilized

Implementation

We

have

implemented

the

variant

of

the

Gl?uck

and

Sorensen

supercompilation

algorithm

specifically

for

the

big-step

semantics

definition

of

a

higher-order

functional

language

with

arithmetic

and

conditionals

The

system

is

implemented

as

lines

of

Sicstus

Prolog

A

more

general-purpose

system

one

that

accepts

as

input

a

big-step

semantics

f

c

x

x

f

-LRB-

s

x

-RRB-

f

c

x

-LRB-

-RRB-

s

x

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

Figure

Linking

the

two

residual

derivations

x

f

-LRB-

s

x

-RRB-

c

s

x

f

x

-LRB-

-RRB-

f

c

let

C

in

-LRB-

C

-RRB-

-LRB-

x

-RRB-

-LRB-

x

-RRB-

-LRB-

f

-LRB-

s

x

-RRB-

-RRB-

Figure

The

derivation

for

the

linked

program

definition

for

an

arbitrary

language

is

being

planned

For

simplicity

nodes

in

the

derivation

tree

are

generated

in

a

leftmost-outermost

fashion

As

they

are

processed

nodes

are

marked

as

fresh

incompletely

processed

or

processed

completely

-LRB-

convergent

-RRB-

and

value

attributes

are

passed

up

the

tree

as

if

they

were

synthesized

attributes

in

an

attribute

grammar

This

simplifies

the

selection

of

the

rewriting

rules

while

preserving

the

methodology

described

in

this

paper

As

seen

in

the

example

in

the

previous

section

if

a

closure

body

contains

a

partial

derivation

and

the

closure

is

applied

to

an

argument

the

closure

body

is

copied

instantiated

and

driving

resumes

at

the

leaves

of

the

copied

closure

body

Embedding

-LRB-

whistle

-RRB-

checks

are

done

only

when

an

expression

e

repeats

in

two

sequents

e

and

e

along

a

path

The

embedding

check

on

environments

is

done

pointwise

and

if

an

embedding

check

of

some

-LRB-

x

-RRB-

must

be

done

with

-LRB-

x

-RRB-

then

and

are

treated

as

ff-equivalent

-LSB-

-RSB-

and

only

the

respective

root

nodes

of

the

two

derivations

and

are

compared

for

embedding

This

abbreviated

comparison

works

safely

because

we

restrict

our

semantics

definitions

to

deterministic

languages

that

is

for

a

starting

sequent

ae

e

there

exists

at

most

one

maximal

well-formed

derivation

Conclusion

Not

surprisingly

the

partial

derivation

trees

generated

by

our

system

are

huge

The

next

stage

of

the

research

is

developing

compact

representations

of

residual

derivations

The

value

arrows

of

the

derivations

likely

hold

the

key

here

i.e.

whenever

-LRB-

ae

e

-RRB-

v

the

node

ae

e

can

be

replaced

by

v

The

compact

residual

derivations

should

also

facilitate

linkage

to

other

partial

derivations

Then

the

linkable

compact

residuals

can

be

used

in

two

ways

First

they

serve

as

modules

for

incremental

static

analysis

This

speeds

up

the

analysis

but

more

importantly

realizes

modular

program

analysis

Second

the

control

flow

graph

of

a

residual

derivation

serves

as

skeleton

for

automating

static

analysis

As

elucidated

in

-LSB-

-RSB-

one

can

use

standard

methods

of

abstract

interpretation

in

order

to

lift

a

concrete

analysis

-LRB-

e.g.

evaluation

-RRB-

into

an

abstract

static

analysis

Combining

the

two

objectives

we

arrive

at

modular

automated

program

analysis

Acknowledgements

Allen

Stoughton

provided

substantial

input

on

the

small-step

aspects

of

big-step

semantics

derivations

John

Hatcliff

and

Morten

Heine

Sorensen

gave

useful

advice

The

anonymous

referees

contributed

significant

feedback

in

many

aspects

Thanks

are

also

due

to

Michael

Leuschel

for

his

organizational

efforts

References

-LSB-

-RSB-

P.

Borras

D.

Cl?ement

T.

Despeyroux

J.

Incerpi

G.

Kahn

and

B.

Lang

Centaur

the

system

In

Proc

SOGSOFT

Third

Ann

Symp

on

Software

Development

Environments

ACM

Press

-LSB-

-RSB-

E.M.

Clarke

O.

Grumberg

and

D.E.

Long

Model

checking

and

abstraction

ACM

Transactions

on

Programming

Languages

and

Systems

-LRB-

-RRB-

-LCB-

-LSB-

-RSB-

M.

Codish

S.

Debray

and

R.

Giacobazzi

Compositional

analysis

of

modular

logic

programs

In

Proc

ACM

Symp

on

Principles

of

Programming

Languages

pages

-LCB-

ACM

Press

-LSB-

-RSB-

P.

Cousot

and

R.

Cousot

Abstract

interpretation

a

unified

lattice

model

for

static

analysis

of

programs

In

Proc

ACM

Symp

on

Principles

of

Programming

Languages

pages

-LCB-

ACM

Press

-LSB-

-RSB-

P.

Cousot

and

R.

Cousot

Inductive

definitions

semantics

and

abstract

interpretation

In

Proc

ACM

Symp

on

Principles

of

Programming

Languages

pages

-LCB-

ACM

Press

-LSB-

-RSB-

D.

Dams

R.

Gerth

and

O.

Grumberg

Abstract

interpretation

of

reactive

systems

ACM

TOPLAS

-LCB-

-LSB-

-RSB-

N.

Dershowitz

and

J.-P

Jouannaud

Rewrite

systems

In

J.

vanLeeuwan

editor

Handbook

of

Theoretical

Computer

Science

pages

-LCB-

Elsevier

-LSB-

-RSB-

Th

Despeyroux

Executable

specification

of

static

semantics

In

G.

Kahn

D.B.

MacQueen

and

G.

Plotkin

editors

Semantics

of

Data

Types

pages

-LCB-

Lecture

Notes

in

Computer

Science

Springer-Verlag

-LSB-

-RSB-

M.

Dwyer

and

D.

Schmidt

Limiting

state

explosion

with

filter-based

refinement

In

Annalisa

Bossi

editor

International

Workshop

on

Verification

Model

Checking

and

Abstract

Interpretation

Port

Jefferson

Long

Island

N.Y.

-LSB-

-RSB-

J.

Gallagher

Tutorial

in

specialisation

of

logic

programs

In

ACM

Symp

on

Partial

Evaluation

and

Semantics-Based

Program

Manipulation

pages

-LCB-

ACM

Press

-LSB-

-RSB-

J.P.

Gallagher

and

L.

Lafave

Regular

approximation

of

computation

paths

in

logic

and

functional

la

gnuages

In

O.

Danvy

R.

Gl?uck

and

P.

Thiemann

editors

Partial

Evaluation

number

in

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

R.

Gl?uck

and

A.

V.

Klimov

Occam

's

razor

in

metacomputation

the

notion

of

a

perfect

process

tree

In

G.

Fil?e

P.Cousot

M.Falaschi

and

A.

Rauzy

editors

Static

Analysis

Proceedings

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

R.

Gl?uck

and

M.

H.

Sorensen

Partial

deduction

and

driving

are

equivalent

In

M.

Hermenegildo

and

J.

Penjam

editors

Programming

Languages

Implementations

Logics

and

Programs

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

SpringerVerlag

-LSB-

-RSB-

R.

Gl?uck

and

M.

H.

Sorensen

A

roadmap

to

metacomputation

by

supercompilation

In

O.

Danvy

R.

Gl?uck

and

P.

Thiemann

editors

Partial

Evaluation

volume

of

Lecture

Notes

in

Computer

Science

Springer-Verlag

-LSB-

-RSB-

V.

Gouranton

and

D.

LeM?etayer

Derivation

of

static

analysers

of

functional

programs

from

path

properties

of

a

natural

semantics

Technical

Report

Research

Report

INRIA

-LSB-

-RSB-

N.D.

Jones

The

essence

of

program

transformation

by

partial

evaluation

and

driving

In

N.D.

Jones

N.

Hagiya

and

S.

Masahiko

editors

Logic

Language

and

Computation

a

Festscrift

in

Honor

of

Satoru

Takasu

pages

-LCB-

Lecture

Notes

in

Computer

Science

Springer-Verlag

-LSB-

-RSB-

Neil

D.

Jones

What

not

to

do

when

writing

an

interpreter

for

specialisation

In

Olivier

Danvy

Robert

Gl?uck

and

Peter

Thiemann

editors

Partial

Evaluation

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

G.

Kahn

Natural

semantics

In

Proc

STACS

pages

-LCB-

Lecture

Notes

in

Computer

Science

Springer

Berlin

-LSB-

-RSB-

J.W.

Klop

Term

rewriting

systems

In

S.

Abramsky

D.

Gabbay

and

T.

Maibaum

editors

Handbook

of

Logic

in

Computer

Science

volume

pages

-LCB-

Oxford

University

Press

-LSB-

-RSB-

J.

Komorowski

An

introduction

to

partial

deduction

In

A.

Pettorossi

editor

MetaProgramming

in

Logic

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

-LSB-

-RSB-

R.

Kowalski

Logic

for

Problem

Solving

North-Holland

-LSB-

-RSB-

Gordon

D.

Plotkin

A

structural

approach

to

operational

semantics

Technical

Report

Computer

Science

Department

Aarhus

University

Aarhus

Denmark

September

-LSB-

-RSB-

D.A.

Schmidt

Natural-semantics-based

abstract

interpretation

In

A.

Mycroft

editor

Static

Analysis

Symposium

number

in

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

D.A.

Schmidt

Trace-based

abstract

interpretation

in

the

operational

semantics

hierarchy

Technical

Report

Kansas

State

University

Manhattan

Kansas

-LSB-

-RSB-

M.

H.

Sorensen

Turchin

's

supercompiler

revisited

Master

's

thesis

Department

of

Computer

Science

University

of

Copenhagen

DIKU-rapport

-LSB-

-RSB-

M.

H.

Sorensen

Properties

of

infinite

reduction

paths

in

untyped

calculus

In

Tbilisi

Symposium

on

Language

Logic

and

Computation

CLSI

Lecture

Notes

to

appear

-LSB-

-RSB-

M.

H.

Sorensen

and

R.

Gl?uck

An

algorithm

of

generalization

in

positive

supercompilation

In

J.W.

Lloyd

editor

Logic

Programming

Proceedings

of

the

International

Sympo

sium

pages

-LCB-

MIT

Press

-LSB-

-RSB-

M.

H.

Sorensen

R.

Gl?uck

and

N.

D.

Jones

Towards

unifying

deforestation

supercompilation

partial

evaluation

and

generalized

partial

computation

In

D.

Sannella

editor

European

Symposium

on

Programming

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

A.

Stoughton

Treating

finite

and

infinite

operational

semantics

derivation

trees

as

objects

Technical

Report

Computing

Science

Kansas

State

University

-LSB-

-RSB-

V.F.

Turchin

The

concept

of

a

supercompiler

ACM

Transactions

on

Programming

Languages

and

Systems

-LRB-

-RRB-

-LCB-

-LSB-

-RSB-

V.F.

Turchin

Program

transformation

by

supercompilation

In

H.

Ganzinger

and

Neil

D.

Jones

editors

Program

as

Data

Objects

Copenhagen

Denmark

volume

of

Lecture

Notes

in

Computer

Science

pages

-LCB-

-LSB-

-RSB-

V.F.

Turchin

The

algorithm

of

generalization

in

the

supercompiler

In

D.

Bjorner

A.P.

Ershov

and

N.D.

Jones

editors

Partial

Evaluation

and

Mixed

Computation

pages

-LCB-

North-Holland

-LSB-

-RSB-

P.L.

Wadler

Deforestation

Transforming

programs

to

eliminate

intermediate

trees

Theoretical

Computer

Science

-LCB-

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O B I I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

modular program analysis
natural semantics
static analysis
supercompilation