Inductive

Coinductive

and

Pointed

Types

Brian

T.

Howard

Department

of

Computer

and

Information

Sciences

Kansas

State

University

bhoward@cis.ksu.edu

Abstract

An

extension

of

the

simply-typed

lambda

calculus

is

presented

which

contains

both

well-structured

inductive

and

coinductive

types

and

which

also

identifies

a

class

of

types

for

which

general

recursion

is

possible

The

motivations

for

this

work

are

certain

natural

constructions

in

category

theory

in

particular

the

notion

of

an

algebraically

bounded

functor

due

to

Freyd

We

propose

that

this

is

a

particularly

elegant

core

language

in

which

to

work

with

recursive

objects

since

the

potential

for

general

recursion

is

contained

in

a

single

operator

which

interacts

well

with

the

facilities

for

bounded

iteration

and

coiteration

Introduction

In

designing

typed

languages

that

include

recursion

there

has

long

been

a

tension

between

the

structure

provided

by

types

based

on

well-founded

induction

and

the

freedom

permitted

by

types

based

on

general

recursion

Very

few

languages

outside

of

purely

theoretical

studies

have

chosen

a

strictly

inductive

system

-LRB-

one

exception

is

charity

-LSB-

-RSB-

-RRB-

partly

because

the

logical

price

to

be

paid

for

ensuring

that

all

recursion

is

well-founded

is

the

necessity

that

all

computations

terminate

hence

the

language

can

not

be

Turingequivalent

On

the

other

hand

the

prevalence

of

inductively

defined

structures

in

computer

science

makes

it

natural

to

structure

many

algorithms

in

terms

of

iteration

over

elements

of

an

inductive

datatype

This

natural

structure

is

lost

in

common

programming

languages

where

iteration

is

at

best

a

syntactic

sugaring

for

an

application

of

a

fixpoint

operator

In

this

paper

we

present

an

extension

of

the

simply-typed

lambda

calculus

with

inductive

types

which

also

allows

general

recursion

in

a

controlled

manner

thus

preserving

many

of

the

benefits

of

well-founded

structural

induction

in

a

Turing-equivalent

language

There

are

two

key

ideas

which

permit

this

ffl

In

addition

to

inductive

types

and

iteration

over

their

elements

we

also

consider

the

dual

notion

the

coin

To

appear

in

ICFP

ACM

SIGPLAN

International

Conference

on

Functional

Programming

May

Philadelphia

Pennsylvania

ductive

types

along

with

their

associated

natural

operation

of

coiteration

ffl

All

the

potential

for

unbounded

recursion

in

the

language

is

confined

to

a

subset

of

the

types

which

are

syntactically

identified

as

pointed

a

generalization

of

the

standard

notion

of

a

lifted

type

along

the

lines

of

Moggi

's

computation

types

General

recursion

over

pointed

types

follows

from

adding

a

function

which

forces

evaluation

of

an

element

of

a

pointed

coinductive

type

either

producing

a

value

of

the

corresponding

inductive

type

or

failing

to

terminate

All

of

the

components

of

the

language

are

motivated

by

constructions

in

category

theory

This

reflects

our

belief

that

the

language

of

categories

can

be

a

useful

source

of

inspiration

and

guidance

in

the

design

of

programming

language

features

Our

goal

is

to

apply

several

recent

results

and

trends

in

category

theory

to

issues

in

practical

language

design

producing

an

elegant

powerful

base

language

with

the

full

natural

structure

afforded

by

inductive

and

coinductive

types

This

structure

is

well-behaved

with

respect

to

a

powerful

set

of

equational

reasoning

principles

ensuring

that

many

useful

program

transformations

will

be

sound

As

an

example

of

a

program

written

in

this

language

consider

first

the

following

term

fibs

of

the

coinductive

type

t

nat

t

-LRB-

which

may

be

thought

of

as

a

type

of

streams

of

natural

numbers

The

details

of

the

language

will

be

presented

in

Section

we

will

use

a

minor

amount

of

syntactic

sugaring

which

will

not

be

discussed

further

-RRB-

fibs

gen

-LRB-

hm

ni

hn

m

nii

-RRB-

This

generates

the

stream

of

Fibonacci

numbers

by

coiteration

no

non-termination

is

yet

involved

because

it

only

generates

successive

numbers

in

the

stream

on

demand

Now

consider

the

related

inductive

type

t

-LRB-

nat

t

-RRB-

which

is

essentially

a

type

of

finite

lists

of

natural

numbers

-LRB-

the

purpose

of

the

lifting

will

be

explained

in

a

moment

-RRB-

A

reasonable

function

defined

by

iteration

over

this

type

is

headUpto

which

when

given

a

natural

number

k

will

take

a

list

and

return

the

longest

prefix

consisting

entirely

of

numbers

less

than

k

headUpto

k

it

-LRB-

bxc

case

x

of

i

if

n

k

then

cons

-LRB-

n

-RRB-

else

-RRB-

where

and

cons

-LRB-

n

-RRB-

are

abbreviations

for

foldb

and

foldb

ic

respectively

Again

this

is

a

perfectly

wellfounded

operation

because

all

lists

of

the

inductive

type

are

finite

If

we

wish

to

use

this

function

to

find

the

list

of

all

Fibonacci

numbers

less

than

we

must

first

force

fibs

from

a

stream

into

a

list

it

is

this

action

of

observing

the

value

of

a

coinductive

object

which

introduces

the

only

possible

source

of

non-termination

in

the

language

and

the

only

reason

it

is

allowed

in

this

program

is

that

we

made

an

explicit

provision

for

it

with

the

lifting

operator

creating

a

pointed

type

The

correct

function

application

is

thus

-LRB-

force

fibs

-RRB-

with

an

appropriate

reduction

strategy

-LRB-

which

only

needs

to

be

lazy

in

applying

the

force

function

-RRB-

this

evaluates

to

the

desired

list

-LRB-

-RRB-

The

above

solution

is

natural

and

elegant

and

would

not

have

been

nearly

so

easy

to

produce

in

a

strictly

iterative

style

On

the

other

hand

a

solution

using

the

standard

machinery

of

fixpoint

operators

would

have

obscured

or

overpowered

the

intuitive

construction

of

the

iterative

and

coiterative

pieces

of

the

computation

Related

work

A

preliminary

attempt

was

made

in

the

author

's

PhD

thesis

-LSB-

-RSB-

-LRB-

see

also

-LSB-

-RSB-

-RRB-

to

reconcile

inductive

types

with

types

for

general

recursion

The

solution

there

was

to

introduce

two

different

kinds

of

recursive

type

corresponding

to

the

choice

between

induction

and

recursion

This

system

did

not

provide

a

close

integration

of

the

two

kinds

of

recursive

type

and

suffered

from

a

reliance

on

the

heavy

machinery

of

fixpoint

induction

for

reasoning

about

terms

involving

general

recursion

Following

recent

work

by

Freyd

and

others

on

algebraic

compactness

-LSB-

-RSB-

the

more

elegant

solution

presented

in

this

paper

was

developed

In

brief

Freyd

showed

how

to

reduce

the

problem

of

finding

solutions

for

general

recursive

domain

equations

to

that

of

building

inductive

types

provided

the

functors

involved

are

algebraically

bounded

i.e.

the

inductive

and

coinductive

types

are

canonically

isomorphic

By

syntactically

identifying

a

class

of

type

expressions

which

will

correspond

in

a

model

to

algebraically

bounded

functors

we

may

apply

this

construction

to

develop

a

programming

language

which

accounts

for

general

recursive

functions

while

only

dealing

with

inductive

-LRB-

and

coinductive

-RRB-

types

In

spirit

this

work

also

follows

in

the

footsteps

of

Crole

and

Pitts

-LSB-

-RSB-

who

present

a

metalanguage

which

accounts

for

general

recursion

by

obtaining

a

fixpoint

object

which

allows

unbounded

iteration

under

the

control

of

Moggi

's

computation

type

-LRB-

see

also

-LSB-

-RSB-

for

recent

work

of

Moggi

along

similar

lines

-RRB-

Working

independently

Launchbury

and

Paterson

-LSB-

-RSB-

have

developed

a

type

system

similar

to

that

described

here

to

keep

track

of

values

which

may

be

unboxed

in

the

implementation

of

a

lazy

functional

language

Their

notion

of

a

pointed

type

-LRB-

which

must

be

boxed

-RRB-

exactly

corresponds

with

ours

except

they

only

allow

pointed

recursive

types

It

is

difficult

to

see

how

a

value

of

one

of

our

unpointed

inductive

types

could

usefully

be

unboxed

in

general

however

it

is

interesting

to

note

that

a

natural

unboxed

representation

of

the

type

t

char

t

is

exactly

the

traditional

null-terminated

string

used

in

C.

Structure

of

the

paper

In

Section

we

present

the

details

of

our

proposed

language

and

its

categorical

motivations

first

a

basic

language

with

functions

sums

and

products

is

described

then

inductive

coinductive

and

pointed

types

are

added

in

turn

The

major

novelty

of

the

language

is

the

system

of

pointed

types

and

the

explicit

forcing

operation

they

permit

this

is

described

in

section

Following

this

are

two

sections

of

examples

and

comparisons

to

related

work

a

fixpoint

combinator

over

pointed

types

is

constructed

in

Section

based

on

the

fixpoint

object

of

Crole

and

Pitts

-LSB-

-RSB-

then

in

Section

we

compare

our

system

to

several

recent

proposals

advocating

a

categorical

style

of

program

construction

and

manipulation

based

on

iteration

and

coiteration

-LSB-

-RSB-

The

language

Figure

presents

a

convenient

formulation

of

the

syntax

of

our

base

language

with

finite

sums

and

products

As

usual

a

typing

judgment

M

oe

means

that

the

term

M

has

type

oe

given

the

context

-LRB-

a

list

of

free

variables

and

their

types

-RRB-

Figure

lists

the

axioms

governing

these

terms

they

are

derived

from

the

equations

which

hold

among

the

corresponding

arrows

in

a

closed

category

with

finite

products

and

coproducts

Observe

that

the

term

metavariables

M

N

are

restricted

to

range

over

only

terms

of

the

appropriate

type

-LRB-

so

that

for

example

the

axiom

-LRB-

-RRB-

does

not

imply

that

all

terms

are

equal

to

but

only

all

terms

of

type

-RRB-

In

association

with

standard

rules

about

equality

and

substitution

these

axioms

provide

an

equational

semantics

A

non-deterministic

operational

semantics

for

the

language

may

be

obtained

by

directing

the

axioms

from

left

to

right

For

more

details

about

this

system

and

the

relation

between

its

equational

and

operational

semantics

consult

-LSB-

-RSB-

related

systems

are

considered

many

places

in

the

literature

for

example

-LSB-

-RSB-

In

a

standard

way

we

may

interpret

a

type

expression

oe

containing

a

free

type

variable

t

as

a

functor

that

is

it

provides

a

map

from

types

to

types

by

substitution

for

t

and

it

may

be

extended

to

a

map

on

terms

of

function

type

-LRB-

because

the

intended

model

of

this

language

is

a

cartesian

closed

category

we

will

feel

free

to

abuse

the

distinction

between

arrows

and

elements

of

an

exponential

object

and

to

switch

between

external

and

internal

views

of

functors

-RRB-

For

example

if

oe

t

then

as

a

functor

it

maps

the

type

o

to

o

and

it

maps

a

term

M

of

type

o

AE

to

the

term

-LSB-

x

AE

y

o

AE

-LRB-

My

-RRB-

-RSB-

of

type

o

AE

When

talking

about

oe

as

a

functor

we

will

find

it

convenient

to

name

these

maps

Foe

or

simply

F

thus

we

would

write

F

-LRB-

o

-RRB-

o

and

F

-LRB-

M

-RRB-

-LSB-

x

y

-LRB-

My

-RRB-

-RSB-

-LRB-

dropping

type

annotations

for

brevity

-RRB-

A

solution

to

the

recursive

type

equation

t

oe

is

a

type

o

such

that

there

is

an

isomorphism

between

o

and

F

-LRB-

o

-RRB-

i.e.

o

is

a

fixpoint

of

F

A

well-known

technique

for

finding

a

fixpoint

attributed

to

Lambek

is

to

consider

the

category

of

F

algebras

whose

objects

are

-LRB-

in

our

case

-RRB-

functions

of

type

F

-LRB-

AE

-RRB-

AE

for

any

type

AE

given

F

algebras

f

F

-LRB-

o

-RRB-

o

and

g

F

-LRB-

AE

-RRB-

AE

an

arrow

from

f

to

g

is

a

function

h

of

type

o

AE

such

that

the

following

diagram

commutes

-LRB-

hyp

-RRB-

x

oe

x

oe

-LRB-

I

-RRB-

x

oe

M

o

-LRB-

x

oe

M

-RRB-

oe

o

M

oe

o

N

oe

MN

o

-LRB-

E

-RRB-

-LRB-

-RRB-

M

oe

o

oe

-LRB-

-RRB-

-LRB-

I

-RRB-

M

oe

N

o

hM

Ni

oe

o

M

oe

o

o

-LRB-

-RRB-

-LRB-

-RRB-

M

oe

oe

o

M

oe

o

AE

-LRB-

-RRB-

-LRB-

-RRB-

M

o

oe

o

M

oe

o

M

oe

AE

N

o

AE

-LSB-

M

N

-RSB-

oe

o

AE

-LRB-

E

-RRB-

Figure

Syntax

of

the

basic

language

-LRB-

-RRB-

-LRB-

x

oe

M

-RRB-

N

fN

xgM

-LRB-

x

oe

Mx

-RRB-

M

x

not

free

in

M

-LRB-

-RRB-

-LRB-

-RRB-

Ni

M

M

-LRB-

-RRB-

-LRB-

-RRB-

Ni

N

M

-LRB-

-RRB-

-LRB-

-RRB-

-LSB-

M

N

-RSB-

-LRB-

oe

o

P

-RRB-

MP

M

-LRB-

-RRB-

-LRB-

-RRB-

-LSB-

M

N

-RSB-

-LRB-

oe

o

P

-RRB-

NP

M

-LSB-

x

oe

M

-LRB-

oe

o

x

-RRB-

y

o

M

-LRB-

oe

o

y

-RRB-

-RSB-

-LRB-

-RRB-

x

and

y

not

free

in

M

Figure

Axioms

of

the

basic

language

F

-LRB-

o

-RRB-

F

-LRB-

AE

-RRB-

o

AE

F

-LRB-

h

-RRB-

h

f

g

If

f

F

-LRB-

o

-RRB-

o

is

an

initial

object

in

this

category

then

in

fact

o

is

a

fixpoint

of

F

and

f

is

the

desired

isomorphism

If

g

F

-LRB-

AE

-RRB-

AE

is

the

isomorphism

for

any

other

fixpoint

AE

of

F

then

the

initiality

of

f

implies

that

the

arrow

h

in

the

above

diagram

gives

a

unique

way

to

map

o

into

AE

in

this

respect

o

is

the

least

fixpoint

of

F

A

dual

solution

to

t

oe

may

be

found

by

taking

a

terminal

object

in

the

category

of

F

coalgebras

which

are

simply

functions

of

type

AE

F

-LRB-

AE

-RRB-

Reversing

all

the

arrows

in

the

above

diagram

if

f

o

F

-LRB-

o

-RRB-

is

such

a

terminal

object

then

o

is

the

greatest

fixpoint

of

F

If

we

extend

our

assumptions

about

the

category

underlying

to

suppose

that

at

least

every

F

which

corresponds

to

a

type

expression

oe

has

both

least

and

greatest

fixpoints

-LRB-

that

is

it

is

algebraically

complete

and

cocomplete

in

a

relevant

sense

-RRB-

then

we

may

augment

the

language

to

include

these

fixpoints

as

the

types

t

oe

and

t

oe

respectively

which

we

will

frequently

write

as

F

and

F

An

important

point

to

note

is

that

the

type

expression

t

oe

does

not

produce

a

-LRB-

covariant

-RRB-

functor

given

a

function

f

o

AE

there

is

no

general

way

to

produce

a

function

of

type

-LRB-

o

oe

-RRB-

-LRB-

AE

oe

-RRB-

-LRB-

consider

oe

o

and

AE

and

note

that

the

existence

of

a

function

of

type

leads

to

inconsistency

-RRB-

This

contravariance

in

the

first

argument

of

leads

us

to

restrict

the

types

oe

for

which

we

can

find

fixpoints

to

those

in

which

t

occurs

only

positively

that

is

to

the

left

of

an

even

number

of

function

arrows

The

terms

and

proof

rules

corresponding

to

these

least

and

greatest

fixpoint

types

-LRB-

which

are

commonly

called

inductive

and

coinductive

types

respectively

-RRB-

are

given

in

Figure

For

F

the

term

fold?F

is

-LRB-

the

isomorphism

of

-RRB-

the

initial

F

algebra

and

the

application

it?F

M

produces

the

unique

F

algebra

morphism

from

fold?F

to

the

given

function

M

Dually

unfold?F

is

the

terminal

F

coalgebra

and

gen?F

M

produces

the

unique

morphism

from

M

to

unfold?F

The

language

described

to

this

point

is

called

in

-LSB-

-RSB-

it

is

shown

there

that

the

reduction

rules

for

this

language

are

confluent

and

strongly

normalizing

hence

only

total

functions

may

be

computed

In

fact

the

class

of

total

functions

expressible

in

is

quite

large

containing

precisely

those

functions

provably

total

in

the

logic

ID

efficiency

's

sake

we

should

also

add

terms

and

axioms

providing

explicit

inverses

to

fold?F

and

unfold?F

although

it?F

F

-LRB-

fold?F

-RRB-

-LRB-

and

dually

gen?F

F

-LRB-

unfold?F

-RRB-

-RRB-

has

the

right

behavior

it

works

in

time

proportional

to

the

size

of

its

argument

instead

of

constant

time

This

is

related

to

the

well-known

linear-time

predecessor

problem

-LRB-

I

-RRB-

fold?F

F

-LRB-

F

-RRB-

F

M

F

-LRB-

o

-RRB-

o

it?F

M

F

o

-LRB-

E

-RRB-

-LRB-

I

-RRB-

M

o

F

-LRB-

o

-RRB-

gen?F

M

o

F

unfold?F

F

F

-LRB-

F

-RRB-

-LRB-

E

-RRB-

-LRB-

fi

-RRB-

it?F

M

-LRB-

fold?F

N

-RRB-

M

-LRB-

F

-LRB-

it?F

M

-RRB-

N

-RRB-

P

-LRB-

fold?F

N

-RRB-

M

-LRB-

F

-LRB-

P

-RRB-

N

-RRB-

P

it?F

M

-LRB-

-RRB-

-LRB-

-RRB-

unfold?F

-LRB-

gen?F

M

N

-RRB-

F

-LRB-

gen?F

M

-RRB-

-LRB-

MN

-RRB-

unfold?F

-LRB-

PN

-RRB-

F

-LRB-

P

-RRB-

-LRB-

MN

-RRB-

P

gen?F

M

-LRB-

-RRB-

Figure

Syntax

and

axioms/inference

rules

for

inductive

and

coinductive

types

which

is

first

order

arithmetic

augmented

by

finitely-iterated

inductive

definitions

-LRB-

see

-LSB-

-RSB-

for

details

about

this

logic

the

relation

to

was

presented

in

-LSB-

-RSB-

-RRB-

This

almost

certainly

contains

every

total

function

that

would

ever

be

needed

for

practical

purposes

as

it

contains

at

an

early

stage

every

function

bounded

by

Ackermann

's

notoriously

fast-growing

function

However

from

a

theoretical

viewpoint

this

is

nowhere

near

the

class

of

all

computable

functions

-LRB-

and

as

long

as

all

computations

are

terminating

it

can

never

hope

to

cover

the

entire

class

because

to

do

so

would

solve

the

Halting

Problem

-RRB-

and

from

a

practical

viewpoint

the

proof

of

expressibility

of

any

total

function

bounded

by

some

fast-growing

function

does

not

lead

to

an

efficient

program

since

the

result

will

have

the

running

time

of

the

bounding

function

Contravariance

and

pointed

types

The

usual

Smyth-Plotkin

construction

of

fixpoints

of

mixedvariant

functors

in

categories

enriched

with

an

ordering

structure

-LSB-

-RSB-

reveals

a

coincidence

between

least

and

greatest

fixpoints

Recent

work

of

Freyd

-LSB-

-RSB-

shows

that

this

coincidence

is

the

essential

property

needed

to

handle

contravariance

Specifically

all

that

is

needed

to

construct

a

fixed

point

for

a

contravariant

endofunctor

F

is

to

show

that

the

covariant

functor

F

is

algebraically

bounded

meaning

that

it

has

both

an

initial

algebra

and

a

terminal

coalgebra

and

they

are

canonically

isomorphic

Consequently

the

only

addition

needed

to

to

allow

the

representation

of

fixpoints

of

contravariant

functors

is

a

function

expressing

this

isomorphism

We

do

not

want

to

assert

that

all

corresponding

least

and

greatest

fixpoints

are

isomorphic

for

instance

if

there

were

any

function

from

t

t

to

t

t

then

all

terms

at

each

type

would

be

provably

equal

-LRB-

given

that

we

desire

categorical

finite

sums

as

well

as

cartesian

closure

-RRB-

Following

Simpson

-LSB-

-RSB-

we

will

identify

the

algebraically

bounded

functors

by

considering

a

faithful

commutative

strong

monad

whose

functor

T

is

algebraically

bounded

Call

a

type

o

pointed

if

it

is

the

underlying

object

of

an

Eilenberg-Moore

T

algebra

i.e.

if

there

is

a

retraction

aeo

T

-LRB-

o

-RRB-

o

for

the

unit

o

o

T

-LRB-

o

-RRB-

such

that

aeo

ffi

T

-LRB-

aeo

-RRB-

aeo

ffi

o

where

o

T

-LRB-

o

-RRB-

T

-LRB-

o

-RRB-

is

the

monad

multiplication

Say

that

a

functor

F

is

pointed

interesting

feature

of

this

correspondence

is

that

coinductive

types

and

non-strictly-positive

inductive

types

-LRB-

where

t

occurs

to

the

left

of

a

function

arrow

-RRB-

do

not

add

to

the

expressiveness

all

computations

over

these

types

may

be

coded

up

using

a

family

of

ordinal

notations

described

by

strictly-positive

inductive

types

if

F

-LRB-

o

-RRB-

is

pointed

for

any

o

and

say

that

it

is

conditionally

pointed

if

F

-LRB-

o

-RRB-

is

pointed

whenever

o

is

then

we

have

the

following

proposition

Proposition

For

any

interpretation

of

in

a

cartesian

closed

category

with

finite

sums

least

and

greatest

fixpoints

for

all

relevant

endofunctors

and

a

monad

as

described

above

If

oe

and

o

are

pointed

types

and

AE

is

an

arbitrary

type

then

T

AE

oe

o

and

AE

o

are

all

pointed

types

If

F

is

conditionally

pointed

then

F

is

pointed

If

F

is

pointed

then

F

and

F

are

canonically

isomorphic

-LRB-

and

pointed

-RRB-

Since

the

motivating

example

is

the

category

of

predomains

and

total

functions

with

the

standard

lifting

monad

identifying

the

pointed

objects

as

the

domains

we

will

write

o

for

the

type

T

-LRB-

o

-RRB-

The

corresponding

additions

to

the

terms

and

proof

rules

are

given

in

Figure

The

lift

bMc

corresponds

to

an

application

of

the

unit

while

the

pointed

abstraction

bx

oec

M

corresponds

to

applying

the

functor

T

to

the

function

x

M

oe

o

and

post-composing

with

the

retract

from

o

to

o

These

generalize

the

similar

constructions

in

Moggi

's

computational

lambda

calculus

-LSB-

-RSB-

in

two

ways

ffl

We

include

the

total

function

space

constructor

as

well

as

the

Kleisli

exponential

this

is

consistent

with

our

other

type

constructors

because

we

only

allow

general

recursion

on

pointed

types

-LRB-

see

below

-RRB-

ffl

As

a

result

the

body

of

the

pointed

abstraction

may

be

of

any

pointed

type

not

just

a

computation

type

T

-LRB-

o

-RRB-

The

term

force?F

gives

the

promised

isomorphism

from

F

to

F

-LRB-

there

is

always

a

morphism

in

the

other

direction

described

by

it?F

unfold

F

or

equivalently

gen?F

fold

F

-RRB-

the

axiom

-LRB-

fi

-RRB-

simply

expresses

the

fact

that

it

is

an

F

-LRB-

co

-RRB-

algebra

morphism

The

intuition

for

calling

this

function

force

is

that

it

provides

the

interface

between

the

naturally

lazy

coinductive

type

F

and

the

more

concrete

observable

-LRB-

at

least

to

the

extent

that

other

components

of

is

not

quite

correct

to

avoid

cardinality

problems

with

types

such

as

t

-LRB-

t

bool

-RRB-

bool

where

bool

we

need

to

work

in

a

realizable

version

of

domains

An

appropriate

category

of

PERs

should

work

fine

-LRB-

I

-RRB-

M

oe

bMc

oe

x

oe

M

o

o

pointed

-LRB-

bx

oec

M

-RRB-

oe

o

-LRB-

E

-RRB-

-LRB-

-RRB-

F

pointed

force?F

F

F

-LRB-

-RRB-

-LRB-

bx

oec

M

-RRB-

bNc

fN

xgM

-LRB-

fi

-RRB-

force?F

M

fold?F

-LRB-

F

-LRB-

force?F

-RRB-

-LRB-

unfold?F

M

-RRB-

-RRB-

Figure

Syntax

and

axioms

for

pointed

types

F

are

observable

types

such

as

products

or

sums

-RRB-

inductive

type

F

coercing

one

to

the

other

perhaps

at

the

expense

of

non-termination

if

an

attempt

is

made

to

force

evaluation

of

an

infinite

element

Properties

of

reduction

For

reference

we

collect

the

reduction

rules

for

in

Figure

Using

standard

results

about

such

reduction

systems

-LRB-

see

-LSB-

-RSB-

-RRB-

it

is

easy

to

prove

that

reduction

is

confluent

and

that

a

lazy

reduction

strategy

-LRB-

i.e.

outermost

reduction

of

the

principal

subterm

of

each

elimination

operator

reducing

force

only

when

it

is

the

argument

of

an

iteration

-RRB-

is

normalizing

In

fact

since

the

reduction

system

without

-LRB-

fi

-RRB-

is

strongly

normalizing

the

only

operator

that

needs

to

be

treated

lazily

is

force

If

we

identify

the

class

of

observable

types

as

those

which

do

not

contain

or

-LRB-

intuitively

these

are

the

types

whose

values

may

be

printed

out

-RRB-

then

a

reasonable

definition

of

observational

equivalence

says

that

two

terms

are

equivalent

if

they

have

the

same

result

-LRB-

normal

form

or

nontermination

-RRB-

under

lazy

reduction

in

all

closed

contexts

of

observable

or

lifted

observable

type

with

the

proviso

that

we

do

not

distinguish

values

of

types

isomorphic

to

-LRB-

since

these

are

the

only

types

which

may

be

both

observable

and

pointed

-RRB-

We

conjecture

that

all

of

the

equational

rules

listed

above

-LRB-

in

particular

all

of

the

-LRB-

-RRB-

rules

-RRB-

are

sound

with

respect

to

this

observational

equivalence

therefore

any

program

transformation

justified

by

these

rules

will

also

be

sound

The

restriction

to

observable

and

lifted

observable

types

is

not

harsh

taking

the

example

of

the

headUpto

function

of

the

Introduction

which

produced

values

of

type

t

-LRB-

nat

t

-RRB-

we

may

easily

convert

such

values

into

lifted

lists

-LRB-

t

nat

t

-RRB-

by

applying

the

function

it

-LRB-

bxc

bfold?t

nat?t

xc

-RRB-

Similar

observation

functions

may

be

defined

for

all

types

not

containing

by

applying

Mulry

's

notion

of

the

lifting

of

a

functor

-LSB-

-RSB-

A

fixpoint

object

In

-LSB-

-RSB-

a

fixpoint

object

for

a

monad

-LRB-

T

-RRB-

is

defined

to

be

a

structure

-LRB-

-RRB-

where

T

is

an

initial

T

algebra

and

T

picks

out

the

unique

fixpoint

of

the

arrow

ffi

T

T

This

is

used

as

the

basis

for

a

logical

system

for

reasoning

about

fixpoint

computations

For

example

given

a

fixpoint

object

for

T

they

construct

a

fixpoint

combinator

for

any

type

of

the

form

ff

T

In

we

may

find

a

fixpoint

object

for

any

monad

-LRB-

T

-RRB-

such

that

T

is

pointed

The

type

is

just

T

and

is

fold

We

may

construct

by

first

coiterating

the

T

coalgebra

to

obtain

the

function

gen?T

T

and

then

applying

it

to

the

seed

and

forcing

the

result

over

to

force

-LRB-

gen?T

-RRB-

This

gives

an

infinite

element

in

call

it

The

desired

global

object

is

then

just

-LRB-

x

-RRB-

For

the

special

case

T

-LRB-

o

-RRB-

o

where

o

is

-LRB-

x

o

bxc

-RRB-

-LRB-

and

o

is

-LRB-

by

o?c

y

-RRB-

-RRB-

if

we

define

the

term

as

above

then

we

may

use

it

to

construct

a

fixpoint

combinator

for

an

arbitrary

pointed

type

oe

by

defining

fix

oe

-LRB-

oe

oe

-RRB-

oe

-LRB-

f

oe

oe

it

-LRB-

bx

oec

fx

-RRB-

-RRB-

That

is

we

simply

iterate

f

oe

oe

over

the

object

This

is

as

direct

an

explanation

of

finding

fixpoints

in

a

typed

language

as

this

author

has

seen

-LRB-

an

anonymous

referee

of

an

earlier

version

of

this

paper

pointed

out

that

this

is

essentially

the

construction

given

by

Mulry

in

Theorem

of

-LSB-

-RSB-

-RRB-

Hylomorphisms

and

inductive

programming

There

have

been

several

recent

efforts

in

the

programming

language

community

to

use

programming

techniques

based

on

combinations

of

iteration

and

coiteration

Two

which

we

will

relate

to

our

system

are

Meijer

's

hylomorphisms

and

Kieburtz

's

use

of

weakly

initial

algebras

and

their

duals

Both

of

these

proposals

stay

within

the

realm

of

pointed

types

where

inductive

and

coinductive

types

coincide

so

neither

is

able

to

take

full

advantage

of

the

separation

between

the

well-founded

operations

of

iteration

and

coiteration

and

the

potential

unboundedness

of

an

explicit

force

operation

Nevertheless

we

have

been

significantly

influenced

by

their

suggested

style

of

programming

which

reflects

our

intuitions

about

how

the

structure

of

data

should

guide

the

structure

of

programs

In

the

language

of

the

Squiggol

group

the

functions

defined

using

it

are

catamorphisms

and

those

using

gen

are

anamorphisms

-LRB-

-LSB-

-RSB-

-RRB-

A

hylomorphism

is

a

combination

of

these

concepts

which

first

uses

an

anamorphism

to

build

up

what

Meijer

refers

to

as

a

call-tree

and

then

uses

a

catamorphism

to

reduce

this

tree

to

a

final

result

-LRB-

compare

the

Fibonacci

example

of

the

introduction

-RRB-

A

requirement

for

this

is

that

the

inductive

types

under

consideration

are

all

isomorphic

to

the

corresponding

coinductive

types

They

observe

that

hylomorphisms

necessarily

introduce

the

possibility

of

partial

functions

when

put

in

the

framework

of

where

an

explicit

use

of

force?F

is

needed

to

tie

together

gen?F

M

oe

F

and

it?F

N

F

o

to

obtain

the

hylomorphism

from

oe

to

o

this

follows

from

the

necessity

of

F

being

a

pointed

type

-LRB-

-RRB-

-LRB-

x

oe

M

-RRB-

N

fN

xgM

-LRB-

bx

oec

M

-RRB-

bNc

fN

xgM

-LRB-

-RRB-

-LRB-

-RRB-

Ni

M

-LSB-

M

N

-RSB-

-LRB-

oe

o

P

-RRB-

MP

-LRB-

-RRB-

-LRB-

-RRB-

Ni

N

-LSB-

M

N

-RSB-

-LRB-

oe

o

P

-RRB-

NP

-LRB-

-RRB-

-LRB-

fi

-RRB-

it?F

M

-LRB-

fold?F

N

-RRB-

M

-LRB-

F

-LRB-

it?F

M

-RRB-

N

-RRB-

-LRB-

-RRB-

unfold?F

-LRB-

gen?F

M

N

-RRB-

F

-LRB-

gen?F

M

-RRB-

-LRB-

MN

-RRB-

-LRB-

fi

-RRB-

force?F

M

fold?F

-LRB-

F

-LRB-

force?F

-RRB-

-LRB-

unfold?F

M

-RRB-

-RRB-

Figure

Reduction

rules

of

By

making

this

coercion

explicit

our

system

also

allows

consideration

of

purely

inductive

or

coinductive

types

for

which

all

functions

are

total

Kieburtz

-LSB-

-RSB-

also

uses

hylomorphisms

-LRB-

although

not

by

name

-RRB-

when

he

demonstrates

that

a

useful

notion

for

inductive

programming

is

that

of

finding

homomorphisms

from

weak

initial

F

algebras

That

is

we

may

have

a

function

g

F

-LRB-

o

-RRB-

o

which

has

a

left

inverse

p

o

F

-LRB-

o

-RRB-

i.e.

p

-LRB-

g

-LRB-

x

-RRB-

-RRB-

x

for

all

x

F

-LRB-

o

-RRB-

if

g

is

weakly

initial

then

we

may

construct

an

F

algebra

morphism

from

g

to

any

given

f

F

-LRB-

oe

-RRB-

oe

-LRB-

which

will

not

necessarily

be

unique

-RRB-

This

will

be

possible

if

we

can

just

find

a

fixpoint

of

the

map

which

takes

h

o

oe

into

f

ffi

F

-LRB-

h

-RRB-

ffi

p

But

this

is

just

the

hylomorphism

which

first

coiterates

p

and

then

iteratively

applies

f

to

reduce

the

call-tree

back

down

Therefore

in

we

may

find

weak

initial

F

algebras

just

by

finding

a

left

inverse

provided

F

is

algebraically

bounded

Kieburtz

also

describes

the

dual

case

but

this

still

involves

a

hylomorphism

so

it

is

not

fundamentally

different

-LRB-

just

a

shift

of

view

between

which

of

the

given

functions

is

the

algebra/coalgebra

and

which

is

the

left/right

inverse

-RRB-

Conclusions

We

have

demonstrated

how

recent

developments

in

category

theory

may

be

used

as

guidance

in

designing

a

programming

language

with

well-behaved

recursive

types

The

language

facilities

for

recursion

concentrate

on

the

natural

inductive/coinductive

structure

which

is

common

to

many

of

the

objects

of

interest

to

computer

science

When

general

unbounded

recursion

is

needed

it

is

introduced

in

a

controlled

manner

through

a

function

which

forces

the

evaluation

of

a

coiteration

process

To

avoid

inconsistency

in

a

model

which

includes

both

extensional

-LRB-

categorical

-RRB-

products

and

sums

this

forcing

operation

is

only

allowed

on

a

class

of

types

which

have

been

identified

as

pointed

We

believe

that

the

result

is

an

elegant

language

in

which

to

describe

and

examine

recursive

objects

and

algorithms

References

-LSB-

-RSB-

Michael

Barr

Algebraically

compact

functors

Journal

of

Pure

and

Applied

Algebra

-LCB-

-LSB-

-RSB-

Wilfried

Buchholz

Solomon

Feferman

Wolfram

Pohlers

and

Wilfried

Sieg

Iterated

Inductive

Definitions

and

Subsystems

of

Analysis

Recent

Proof-Theoretical

Studies

Number

in

Lecture

Notes

in

Mathematics

Springer-Verlag

-LSB-

-RSB-

R.

Cockett

and

T.

Fukushima

About

CHAR

ITY

Technical

Report

University

of

Calgary

June

-LSB-

-RSB-

Roy

L.

Crole

and

Andrew

M.

Pitts

New

foundations

for

fixpoint

computations

FIX

hyperdoctrines

and

the

FIX-logic

Information

and

Computation

-LRB-

-RRB-

-LCB-

June

-LSB-

-RSB-

Marcello

P.

Fiore

Axiomatic

Domain

Theory

in

Categories

of

Partial

Maps

PhD

thesis

University

of

Edinburgh

-LSB-

-RSB-

Maarten

M.

Fokkinga

and

Erik

Meijer

Program

calculation

properties

of

continuous

algebras

Technical

Report

CWI

January

-LSB-

-RSB-

Peter

Freyd

Recursive

types

reduced

to

inductive

types

In

Fifth

Annual

IEEE

Symposium

on

Logic

in

Computer

Science

pages

-LCB-

-LSB-

-RSB-

Peter

Freyd

Algebraically

complete

categories

In

A.

Carboni

M.C.

Pedicchio

and

G.

Rosolini

editors

Category

Theory

Proceedings

Como

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

Peter

Freyd

Remarks

on

algebraically

compact

categories

In

M.P.

Fourman

P.T.

Johnstone

and

A.M.

Pitts

editors

Applications

of

Categories

in

Computer

Science

number

in

London

Mathematical

Society

Lecture

Note

Series

pages

-LCB-

Cambridge

University

Press

Proceedings

of

the

LMS

Symposium

Durham

-LSB-

-RSB-

Jean-Yves

Girard

Yves

Lafont

and

Paul

Taylor

Proofs

and

Types

Cambridge

Tracts

in

Theoretical

Computer

Science

Cambridge

University

Press

-LSB-

-RSB-

Brian

T.

Howard

Fixed

Points

and

Extensionality

in

Typed

Functional

Programming

Languages

PhD

thesis

Stanford

University

Published

as

Stanford

Computer

Science

Department

Technical

Report

-LSB-

-RSB-

Brian

T.

Howard

Inductive

projective

and

retractive

types

Technical

Report

Department

of

Computer

and

Information

Science

University

of

Pennsylvania

-LSB-

-RSB-

Brian

T.

Howard

The

expressive

power

of

inductive

and

coinductive

types

Presented

at

the

Tenth

Workshop

on

the

Mathematical

Foundations

of

Programming

Semantics

March

-LSB-

-RSB-

Richard

B.

Kieburtz

Inductive

programming

Technical

Report

CS/E

Oregon

Graduate

Institute

of

Science

and

Technology

-LSB-

-RSB-

Jan

Willem

Klop

Combinatory

Reduction

Systems

PhD

thesis

University

of

Utrecht

Published

as

Mathematical

Center

Tract

-LSB-

-RSB-

John

Launchbury

and

Ross

Paterson

Parametricity

and

unboxing

with

unpointed

types

Available

at

-LSB-

-RSB-

J.

Lambek

and

P.J.

Scott

Introduction

to

HigherOrder

Categorical

Logic

Number

in

Cambridge

Studies

in

Advanced

Mathematics

Cambridge

University

Press

-LSB-

-RSB-

Erik

Meijer

Calculating

Compilers

PhD

thesis

University

of

Nijmegen

-LSB-

-RSB-

Erik

Meijer

Maarten

Fokkinga

and

Ross

Paterson

Functional

programming

with

bananas

lenses

envelopes

and

barbed

wire

In

J.

Hughes

editor

Proceedings

of

the

Fifth

ACM

Conference

on

Functional

Programming

Languages

and

Computer

Architecture

number

in

Lecture

Notes

in

Computer

Science

pages

-LCB-

SpringerVerlag

-LSB-

-RSB-

John

C.

Mitchell

Type

systems

for

programming

languages

In

Jan

van

Leeuwen

editor

Handbook

of

Theoretical

Computer

Science

volume

B

chapter

pages

-LCB-

Elsevier

-LSB-

-RSB-

Eugenio

Moggi

Computational

lambda-calculus

and

monads

In

Fourth

Annual

IEEE

Symposium

on

Logic

in

Computer

Science

pages

-LCB-

-LSB-

-RSB-

Eugenio

Moggi

Metalanguages

and

applications

Available

as

ML-notes.dvi.gz

by

anonymous

ftp

from

theory.doc.ic.ac.uk

in

directory

tfm/papers/MoggiE

October

-LSB-

-RSB-

Philip

S.

Mulry

Strong

monads

algebras

and

fixed

points

In

M.P.

Fourman

P.T.

Johnstone

and

A.M.

Pitts

editors

Applications

of

Categories

in

Computer

Science

number

in

London

Mathematical

Society

Lecture

Note

Series

pages

-LCB-

Cambridge

University

Press

Proceedings

of

the

LMS

Symposium

Durham

-LSB-

-RSB-

Philip

S.

Mulry

Lifting

theorems

for

kleisli

categories

In

S.

Brookes

M.

Main

A.

Melton

M.

Mislove

and

D.

Schmidt

editors

Ninth

International

Conference

on

Mathematical

Foundations

of

Programming

Semantics

number

in

Lecture

Notes

in

Computer

Science

pages

-LCB-

Springer-Verlag

-LSB-

-RSB-

Alex

K.

Simpson

Recursive

types

in

kleisli

categories

Available

as

kleisli.dvi.Z

by

anonymous

ftp

from

ftp.dcs.ed.ac.uk

in

directory

pub/als

August

-LSB-

-RSB-

Michael

B.

Smyth

and

Gordon

D.

Plotkin

The

category-theoretic

solution

of

recursive

domain

equations

SIAM

Journal

on

Computing

-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 O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 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 O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Models for Computational Steering Jeffrey Vetter -LRB- vetter@cc.gatech.edu -RRB- Karsten Schwan -LRB- schwan@cc.gatech.edu -RRB- GIT -LCB- CC -LCB- 95-39 February 28 , 1996 Abstract This paper describes a conceptual model for computational program steering . By exploiting previous results attained in program monitoring , debugging , and configuration , the abstractions and mechanisms derived from this model are shown suitable for both algorithmic and human interactive steering . A characterization of existing systems for computational steering using the model 's abstractions demonstrate such generality . The model is illustrated through its use for steering a large-scale scientific code . Mechanisms for computational steering derived from the model are presented that include sensors , probes , and actuators . College of Computing Georgia Institute of Technology Atlanta , Georgia 30332 -LCB- 0280 1 Introduction Computational steering , or steering , is the run-time control of an application and of the resources it uses for purposes of experimenting with application parameters or improving application performance . Examples of performance-motivated computational steering include the runtime adjustment of performance-relevant parameters in real-time applications -LSB- 1 -RSB- , the adjustment of operating system mechanisms to improve application performance -LSB- 2 , 3 -RSB- , and the improvement of load balance in scientific applications -LSB- 4 -RSB- . Steering performed for purposes of experimentation with target applications alter models and applications attributes -LSB- 5 , 6 , 4 , 7 -RSB- . For example , the steering interface developed for the global atmospheric modeling code described in -LSB- 8 -RSB- permits space scientist to run the code with alternative settings for atmospheric transport , to restart the code from a previously defined checkpoint , and to gradually inject certain chemical constituents into user - identified atmospheric regions . The model of computational steering presented in this paper seeks unifies both algorithmic and human-interactive steering . Human-interactive steering assumes that a human interprets monitoring data from the target system and then inputs steering decisions , which are enacted by the steering system . Since this steering involves human responses , the speed for interactive steering is constrained to human response times . Algorithmic steering , on the other hand , utilizes algorithms that make decisions based on monitoring information and other information sources , such as history files . Its response time depends only on algorithm complexities and on monitoring and steering delays . This paper argues that steering systems should be constructed to support both interactive and algorithmic steering , especially since users will typically wish to employ both modes during the course of application development and use . For example , the space scientists working with our group wish to use the interactive steering facilities to comprehend the nature of the multidimensional data produced by their application and its relationship to specific model parameters -LRB- e.g. , vertical advection -RRB- . Such human interactive steering can take advantage of advanced visualization environments like virtual reality techniques , data walls , etc. -LSB- 3 -RSB- . However , once scientists have discovered suitable model parameters for the input data being used , interactive steering could be automated with algorithmic steering . Therefore , we propose that any steering system must support an evolutionary approach to computational steering . In effect , the system should make it straightforward to redirect online monitoring data from human interactive tools to algorithmic steering tools and visa versa . The desire to steer programs , interactively and algorithmically , distinguishes our work from most previous research in scientific visualization and user interfaces . Furthermore , the interfaces employed in our work must interact on-line with systems generating data rather than explore post-mortem data , as generally supported by commercial visualization tools -LRB- e.g. , SGI Explorer , AVS -RRB- and explored in research on visualization -LSB- 9 , 10 -RSB- . Nonetheless , we view computational steering as an extension of visualization and tracking -LSB- 9 -RSB- based on technologies first developed for configurable and adaptable systems -LSB- 11 , 1 -RSB- . In contrast to the visually-based computational steering systems described in -LSB- 12 -RSB- . Our work separates user interfaces and scientific visualization issues from computational steering . One result of this separation is our system 's ability to work with a variety of user interfaces . Another result is its ability to cross machine boundaries and offer the performance required by on-line steering systems . In the remainder of this paper , we first describe sample application programs and their computational steering . Using these examples as illustration , we develop a model that describes computational steering as consisting of 8 distinct phases . In Section 3 , the model is used to identify some implementation issues of steering ; in Section 4 , other steering systems are described within the context of the proposed model . Section 5 outlines steering mechanisms derived from the model . A summary of results and future research appear in Section 6 . 1.1 Steering Scientific Applications This research is motivated with two sample high performance programs . First , the on-line steering of a molecular dynamics simulation -LSB- 4 -RSB- is shown to improve program performance by removing load imbalances due to inappropriate data decompositions . This long-running , time - stepped simulation models the behavior of complex hydrocarbon chains residing on an inert substrate . When parallelizing this computation by allocating chains to different processors , the resulting computational loads are not easily estimated , since the bond force computations for each molecular chain depend not only on the molecule 's complexity , but also on its distance to other molecules . Second , the initial decomposition of the data domain into ` equal ' horizontal or vertical slabs change during runtime . Third , it is difficult to anticipate the computational loads induced by global computations of total energy and by slabs ' accesses to neighboring slabs ' data . MD is steered by implementing movable boundaries between its different data domains and then moving these boundaries at runtime such that computational loads are balanced . These movements are in response to load balance information captured over some number of time steps with the monitoring system . Experimental results described in -LSB- 4 -RSB- demonstrate that significant performance improvements are attained even with human interactive steering . Clearly , it is possible to automate the relatively straightforward task of domain boundary adjust - ment when steering the MD application . A more complex example of program steering is demonstrated with global atmospheric modeling code . As shown in Figure 1 , this ad-hoc steering interface presents to end users modeling outputs along with the corresponding empirical measurements from satellite data . Figure 1 : Sample Graphical User Interface . It requires human judgment to evaluate and correct divergence between both sets of data . This divergence between both sets of data requires that the model be stopped and rewound to a previous time step , then restarted using different settings for certain model parameters -LRB- e.g. , vertical advection in constituent transport -RRB- . The atmospheric model requires human intervention during many initial model runs . The purpose of interactive steering in this scenario is to abort useless model runs early , to discover suitable parameter settings , and to further scientists ' understanding of the models they use . In addition , end users actually use models like these in ` what if ' games . For example , if they inject certain chemical constituents into the atmospheric model through steering , then they can view the evolving distribution so they can better understand their model of the global phenomena . In our current work with space scientists , interactive program execution is being used to understand the distribution and transport of fluorocarbons and their derivatives in the earth 's atmosphere . 2 A Model for Computational Steering The diverse examples of program steering described in the previous section appear to indicate the need for diverse abstractions and mechanisms for computational steering . This is not the case . Instead , each of the computational steering tasks described previously may be modeled as a closed-loop feedback system -LSB- 13 -RSB- . On-line monitoring and tracking -LSB- 9 -RSB- provide information about the target system 's current state and the remainder of the system permits users to make on-line decisions in order to increase performance , to experiment with certain program parameters , and to attempt relevant ` what-if ' scenarios . Consider the model of a traditional feedback system depicted in Figure 2 . Computational steering maps onto this model as follows . First , monitoring provides inputs to the steering agent1 . In MD , monitoring furnishes on-line information such as processor loads , the number of molecules assigned to each domain , and data about the cutoff radii experienced by certain molecules . The steering agent then decides what steering actions to exercise based on both inputs from the monitoring system and , possibly , inputs from other external sources . External sources provide information not available from the monitoring system , such as inputs from human users or history files that contain information about previous executions . The steering system provides mechanisms to the steering agent for changing the executing system , which in the case of MD , facilitates the runtime configuration of domain boundaries . + Application input & state Resource information Application output Resource Metrics Output Input Steering Monitoring Steering Agent Figure 2 : Simple feedback system . The simple feedback model presented in Figure 2 is the basis on which we develop this paper 's abstract model for computational steering . In this model , the interchangeable steering agent may be a human user , an algorithm , or a hybrid . The steering agent implementation need not depend on the monitoring system . For example , in MD , the steering agent is a Motif-based user interface that receives load information and , then issues steering actions to change the domain boundaries in the running application . 1Agent describes a decision-maker that interprets the input from the monitoring system and dictates steering . Do not confuse ` steering agents ' with ` agents ' commonly used in Internet or cognitive science vernacular . As evident from Figure 2 , the performance of any steering system depends on the latency of monitoring , the latency of the steering agent , and the costs of enacting steering decisions . All of these phases jointly determine the steering system 's response time . This response time varies across systems and limits the types of steering possible on those systems . High performance also requires low perturbation of the system 's execution . Correctness demands that the steering system provide mechanisms to protect the target system from introducing irregular behavior or producing invalid application results . The model extends this analogy with feedback systems further by proposing that a steering system consists of 7 different phases : event generation , event transport , event analysis , steering agent , steering action synthesis , steering action transport , and steering action execution . The first three steps are common to event-based monitoring . The last four steps are specific to the proposed steering model . 2.1 Monitoring Monitoring is the extraction of dynamic information from a computational system -LSB- 14 -RSB- . This model uses an event-based approach to monitoring -LSB- 15 , 16 , 17 , 18 -RSB- , where each primitive event contains 4 basic components -LSB- 16 -RSB- , represented by the tuple < event class , processor ID , timestamp , state > . Primitive events are immutable . Event class is an attribute that describes the type of the event . Event classes differ in the set of attributes they capture . In MD , sample event classes include processor load , domain boundary locations , number of molecules in a domain , and attributes of individual molecules . Event instances of the same class are differentiated by their two attributes processor ID and timestamp . The processor ID , or location , identifies the processor that generated the event . The timestamp reports the time when the event occurred relative to the producing processor 's clock . Finally , the state attribute describes some state within the application relative to observations by the producing processor . State for MD 's processor load event class is a single floating point number that describes the percentage utilization of one processor . State for the number of molecules within a domain is an integer . Complex states contain multiple attributes , such as cache performance data for an individual processor -LRB- e.g. , number of hits and total accesses -RRB- . The state of a target system is described by a stream of event instances -LSB- 16 -RSB- . These streams are processed in order to collate and present interesting results to steering agents . A steering agent does not share state with the executing processor other than through the channels through which events are received -LSB- 18 -RSB- . Each processor has its own reliable channel to the steering agent . Each channel retains event orderings with variable but finite event delivery times . The event timeline as in Figure 3 provides a common and useful medium for discussing this model . Time increases from left to right and distinct processor execution flows along each arrow . Distinct processors exchange events and actions , similar to messages . For the purposes of steering , the processors do not have access to any shared global state . All state information is exchanged through event and action messages . PX represents a processor that is ` external ' to the target system being monitored and steered . P1 is one processor within the target system . The 3 phases of monitoring . Figure 3 illustrates the different processing phases experienced by each single primitive event , which are : event generation , event transport , event analysis , and possibly , event presentation -LSB- 16 , 18 , 14 -RSB- . Event presentation is shown for completeness but later it is omitted because the steering agent subsumes this phase .

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 B O O O O O O O O O O B O O B 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 B I 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 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 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 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 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 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 B I O O O O O O O O O O B O O B 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 B O O O O O O O B I 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 B O O O O O O B 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 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 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 B I O O O O O B O O O O O O O B 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 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 B I 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 B 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 B I 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 B 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 B 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 B I 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 B 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 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 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 B I O O O O O B 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 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 B I 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 B 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 B O O O O O B 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 B 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 B I O O O O O O O B 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 B 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 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 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 B 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 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 B O O O O O O O O O O O O O O O O B O O B O O O B 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 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 B 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 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 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 B O O O O O

computational steering
configuration
debugging
interactive steering
steering

adaptation
distributed computing
parallel computing
software tools