denotational design - from meanings to...

58
Denotational Design from meanings to programs Conal Elliott LambdaJam 2015 Conal Elliott Denotational Design LambdaJam 2015 1 / 58

Upload: others

Post on 12-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Denotational Design

from meanings to programs

Conal Elliott

LambdaJam 2015

Conal Elliott Denotational Design LambdaJam 2015 1 / 58

Page 2: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Abstraction

The purpose of abstraction is not to be vague,

but to create a new semantic level

in which one can be absolutely precise.

- Edsger Dijkstra

Conal Elliott Denotational Design LambdaJam 2015 2 / 58

Page 3: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Goals

Abstractions: precise, elegant, reusable.

Implementations: correct, efficient, maintainable.

Documentation: clear, simple, accurate.

Conal Elliott Denotational Design LambdaJam 2015 3 / 58

Page 4: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Not even wrong

Conventional programming is precise only about how, not what.

It is not only not right, it is not even wrong.

- Wolfgang Pauli

Everything is vague to a degree you do not realize

till you have tried to make it precise.

- Bertrand Russell

What we wish, that we readily believe.

- Demosthenes

Conal Elliott Denotational Design LambdaJam 2015 4 / 58

Page 5: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Denotative programming

Peter Landin recommended “denotative” to replace ill-defined

“functional” and “declarative”.

Properties:

Nested expression structure.

Each expression denotes something,

depending only on denotations of subexpressions.

“. . . gives us a test for whether the notation is genuinely functional or

merely masquerading.” (The Next 700 Programming Languages, 1966)

Conal Elliott Denotational Design LambdaJam 2015 5 / 58

Page 6: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Denotational design

Design methodology for “genuinely functional” programming:

Precise, simple, and compelling specification.

Informs use and implementation without entangling them.

Standard algebraic abstractions.

Free of abstraction leaks.

Laws for free.

Principled construction of correct implementation.

Conal Elliott Denotational Design LambdaJam 2015 6 / 58

Page 7: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Overview

Broad outline:

Example, informally

Pretty pictures

Principles

More examples

Reflection

Discussion throughout

Try it on.

Conal Elliott Denotational Design LambdaJam 2015 7 / 58

Page 8: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: image synthesis/manipulation

How to start?

What is success?

Conal Elliott Denotational Design LambdaJam 2015 8 / 58

Page 9: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Functionality

Import & export

Spatial transformation:

Affine: translate, scale, rotate

Non-affine: swirls, lenses, inversions, . . .

Cropping

Monochrome

Overlay

Blend

Blur & sharpen

Geometry, gradients, . . . .

Conal Elliott Denotational Design LambdaJam 2015 9 / 58

Page 10: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

API first pass

type Image

over :: Image Ñ Image Ñ Image

transform :: Transform Ñ Image Ñ Image

crop :: Region Ñ Image Ñ Image

monochrome :: Color Ñ Image

-- shapes, gradients, etc.

fromBitmap :: Bitmap Ñ Image

toBitmap :: Image Ñ Bitmap

Conal Elliott Denotational Design LambdaJam 2015 10 / 58

Page 11: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

How to implement?

wrong first question

Conal Elliott Denotational Design LambdaJam 2015 11 / 58

Page 12: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

What to implement?

What do these operations mean?

More centrally: What do the types mean?

Conal Elliott Denotational Design LambdaJam 2015 12 / 58

Page 13: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

What is an image?

Specification goals:

Adequate

Simple

Precise

Why these properties?

Conal Elliott Denotational Design LambdaJam 2015 13 / 58

Page 14: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

What is an image?

My answer: assignment of colors to 2D locations.

How to make precise?

type Image

Model:

µ :: Image Ñ pLoc Ñ Colorq

What about regions?

µ :: Region Ñ pLoc Ñ Boolq

Conal Elliott Denotational Design LambdaJam 2015 14 / 58

Page 15: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Specifying Image operations

µ pover top botq ” ...

µ pcrop reg imq ” ...

µ pmonochrome cq ” ...

µ ptransform tr imq ” ...

Conal Elliott Denotational Design LambdaJam 2015 15 / 58

Page 16: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Specifying Image operations

µ pover top botq ” λp Ñ overC pµ top pq pµ bot pq

µ pcrop reg imq ” λp Ñ if µ reg p then µ im p else clear

µ pmonochrome cq ” λp Ñ c

µ ptransform tr imq ” -- coming up

overC :: Color Ñ Color Ñ Color

Note compositionality of µ.

Conal Elliott Denotational Design LambdaJam 2015 16 / 58

Page 17: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Compositional semantics

Make more explicit:

µ pover top botq ” overS pµ topq pµ botq

µ pcrop reg imq ” cropS pµ regq pµ imq

overS :: pLoc Ñ Colorq Ñ pLoc Ñ Colorq Ñ pLoc Ñ Colorq

overS f g “ λp Ñ overC pf pq pg pq

cropS :: pLoc Ñ Boolq Ñ pLoc Ñ Colorq Ñ pLoc Ñ Colorq

cropS f g “ λp Ñ if f p then g p else clear

Conal Elliott Denotational Design LambdaJam 2015 17 / 58

Page 18: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Generalize and simplify

What about transforming regions?

Other pointwise combinations (lerp, threshold)?

Generalize:

type Image a

type ImageC “ Image Color

type Region “ Image Bool

Now some operations become more general.

Conal Elliott Denotational Design LambdaJam 2015 18 / 58

Page 19: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Generalize and simplify

transform :: Transform Ñ Image a Ñ Image a

cond :: Image Bool Ñ Image a Ñ Image a Ñ Image a

lift0 :: a Ñ Image a

lift1 :: pa Ñ bq Ñ pImage a Ñ Image bq

lift2 :: pa Ñ b Ñ cq Ñ pImage a Ñ Image b Ñ Image cq

...

Specializing,

monochrome “ lift0

over “ lift2 overC

crop r im “ cond r im emptyIm

cond “ lift3 ifThenElse

Conal Elliott Denotational Design LambdaJam 2015 19 / 58

Page 20: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Spatial transformation

µ :: Transform Ñ ??

µ ptransform tr imq ” ??

Conal Elliott Denotational Design LambdaJam 2015 20 / 58

Page 21: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Spatial transformation

µ :: Transform Ñ ??

µ ptransform tr imq ” transformS pµ trq pµ imq

where

transformS :: ?? Ñ pLoc Ñ Colorq Ñ pLoc Ñ Colorq

Conal Elliott Denotational Design LambdaJam 2015 21 / 58

Page 22: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Spatial transformation

µ :: Transform Ñ pLoc Ñ Locq

µ ptransform tr imq ” transformS pµ trq pµ imq

where

transformS :: pLoc Ñ Locq Ñ pLoc Ñ Colorq Ñ pLoc Ñ Colorq

transformS h f “ λp Ñ f ph pq

Subtle implications.

What is Loc? My answer: continuous, infinite 2D space.

type Loc “ R2

Conal Elliott Denotational Design LambdaJam 2015 22 / 58

Page 23: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Why continuous & infinite (vs discrete/finite) space?

Same benefits as for time (FRP):

Transformation flexibility with simple & precise semantics.

Modularity/reusability/composability:

Fewer assumptions, more uses (resolution-independence).

More info available for extraction.

Integration and differentiation: natural, accurate, efficient.

Quality/accuracy.

Efficiency (adapative).

Reconcile differing input sampling rates.

Principle: Approximations/prunings compose badly, so postpone.

See Why Functional Programming Matters.

Conal Elliott Denotational Design LambdaJam 2015 23 / 58

Page 24: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Examples

Pan gallery

Conal Elliott Denotational Design LambdaJam 2015 24 / 58

Page 25: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Using standard vocabulary

We’ve created a domain-specific vocabulary.

Can we reuse standard vocabularies instead?

Why would we want to?

User knowledge.

Ecosystem support (multiplicative power).

Laws as sanity check.

Tao check.

Specification and laws for free, as we’ll see.

In Haskell, standard type classes.

Conal Elliott Denotational Design LambdaJam 2015 25 / 58

Page 26: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Monoid

Interface:

class Monoid m where

ε :: m -- “mempty”

p‘q :: m Ñ m Ñ m -- “mappend”

Laws:

a ‘ ε ” a

ε‘ b ” b

a ‘ pb ‘ cq ” pa ‘ bq ‘ c

Why do laws matter? Compositional (modular) reasoning.

What monoids have we seen today?

Conal Elliott Denotational Design LambdaJam 2015 26 / 58

Page 27: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Image monoid

instance Monoid ImageC where

ε “ lift0 clear

p‘q “ over

Is there a more general form on Image a?

instance Monoid a ñ Monoid pImage aq where

ε “ lift0 ε

p‘q “ lift2 p‘q

Do these instances satisfy the Monoid laws?

Conal Elliott Denotational Design LambdaJam 2015 27 / 58

Page 28: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Functor

class Functor f where

fmap :: pa Ñ bq Ñ pf a Ñ f bq

For images?

instance Functor Image where

fmap “ lift1

Laws?

Conal Elliott Denotational Design LambdaJam 2015 28 / 58

Page 29: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Applicative

class Functor f ñ Applicative f where

pure :: a Ñ f a

pă̊ąq :: f pa Ñ bq Ñ f a Ñ f b

For images?

instance Applicative Image where

pure “ lift0

pă̊ąq “ lift2 p$q

From Applicative, where pă$ąq “ fmap:

liftA2 f p q “ f ă$ą p ă̊ą q

liftA3 f p q r “ f ă$ą p ă̊ą q ă̊ą r

-- etc

Laws?Conal Elliott Denotational Design LambdaJam 2015 29 / 58

Page 30: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Instance semantics

Monoid :

µ ε ” λp Ñ ε

µ ptop ‘ botq ” λp Ñ µ top p ‘ µ bot p

Functor :

µ pfmap f imq ” λp Ñ f pµ im pq

” f ˝ µ im

Applicative:

µ ppure aq ” λp Ñ a

µ pimf ă̊ą imx q ” λp Ñ pµ imf pq pµ imx pq

Conal Elliott Denotational Design LambdaJam 2015 30 / 58

Page 31: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Monad and Comonad

class Monad f where

return :: a Ñ f a

join :: f pf aq Ñ f a

class Functor f ñ Comonad f where

coreturn :: f a Ñ a

cojoin :: f a Ñ f pf aq

Comonad gives us neighborhood operations.

Conal Elliott Denotational Design LambdaJam 2015 31 / 58

Page 32: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Monoid specification, revisited

Image monoid specification:

µ ε ” λp Ñ ε

µ ptop ‘ botq ” λp Ñ µ top p ‘ µ bot p

Instance for the semantic model:

instance Monoid m ñ Monoid pz Ñ mq where

ε “ λz Ñ ε

f ‘ g “ λz Ñ f z ‘ g z

Refactoring,

µ ε ” ε

µ ptop ‘ botq ” µ top ‘ µ bot

So µ distributes over monoid operations, i.e., a monoid homomorphism.Conal Elliott Denotational Design LambdaJam 2015 32 / 58

Page 33: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Functor specification, revisited

Functor specification:

µ pfmap f imq ” f ˝ µ im

Instance for the semantic model:

instance Functor ppÑq uq where

fmap f h “ f ˝ h

Refactoring,

µ pfmap f imq ” fmap f pµ imq

So µ is a functor homomorphism.

Conal Elliott Denotational Design LambdaJam 2015 33 / 58

Page 34: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Applicative specification, revisited

Applicative specification:

µ ppure aq ” λp Ñ a

µ pimf ă̊ą imx q ” λp Ñ pµ imf pq pµ imx pq

Instance for the semantic model:

instance Applicative ppÑq uq where

pure a “ λu Ñ a

fs ă̊ą xs “ λu Ñ pfs uq pxs uq

Refactoring,

µ ppure aq ” pure a

µ pimf ă̊ą imx q ” µ imf ă̊ą µ imx

So µ is an applicative homomorphism.Conal Elliott Denotational Design LambdaJam 2015 34 / 58

Page 35: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Specifications for free

Semantic type class morphism (TCM) principle:

The instance’s meaning follows the meaning’s instance.

That is, the type acts like its meaning.

Every TCM failure is an abstraction leak.

Strong design principle.

Class laws necessarily hold, as we’ll see.

Conal Elliott Denotational Design LambdaJam 2015 35 / 58

Page 36: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Laws for free

µ ε ” ε

µ pa ‘ bq ” µ a ‘ µ bñ

a ‘ ε ” a

ε‘ b ” b

a ‘ pb ‘ cq ” pa ‘ bq ‘ c

where equality is semantic. Proofs:

µ pa ‘ εq

” µ a ‘ µ ε

” µ a ‘ ε

” µ a

µ pε‘ bq

” µ ε‘ µ b

” ε‘ µ b

” µ b

µ pa ‘ pb ‘ cqq

” µ a ‘ pµ b ‘ µ cq

” pµ a ‘ µ bq ‘ µ c

” µ ppa ‘ bq ‘ cq

Works for other classes as well.

Conal Elliott Denotational Design LambdaJam 2015 36 / 58

Page 37: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: functional reactive programming

See previous talks:

The essence and origins of FRP

A more elegant specification for FRP

Conal Elliott Denotational Design LambdaJam 2015 37 / 58

Page 38: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: uniform pairs

Type:

data Pair a “ a :# a

API: Monoid , Functor , Applicative, Monad , Foldable, Traversable.

Specification follows from simple & precise denotation.

Conal Elliott Denotational Design LambdaJam 2015 38 / 58

Page 39: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Uniform pairs — denotation

Pair is an indexable container. What’s the index type?

type P a “ Bool Ñ a

µ :: Pair a Ñ P a

µ pu :# vq False “ u

µ pu :# vq True “ v

API specification? Homomorphisms, as usual!

Conal Elliott Denotational Design LambdaJam 2015 39 / 58

Page 40: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Uniform pairs — monoid

Monoid homomorphism:

µ ε ” ε

µ pu ‘ vq ” µ u ‘ µ v

In this case,

instance Monoid m ñ Monoid pz Ñ mq where

ε “ λz Ñ ε

f ‘ g “ λz Ñ f z ‘ g z

so

µ ε ” λz Ñ ε

µ pu ‘ vq ” λz Ñ µ u z ‘ µ v z

Implementation: solve for ε and p‘q on the left. Hint: find µ´1.Conal Elliott Denotational Design LambdaJam 2015 40 / 58

Page 41: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Uniform pairs — other classes

Exercise: apply the same principle for

Functor

Applicative

Monad

Foldable

Traversable

Conal Elliott Denotational Design LambdaJam 2015 41 / 58

Page 42: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: streams

data Stream a “ Cons a pStream aq

API: same classes as with Pair .

Denotation? Hint: Stream is also an indexable type.

data S a “ Nat Ñ a

data Nat “ Zero | Succ Nat

Interpret Stream as S :

µ :: Stream a Ñ S a

µ pCons a q Zero “ a

µ pCons asq pSucc nq “ µ as n

Conal Elliott Denotational Design LambdaJam 2015 42 / 58

Page 43: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Memo tries

Generalizes Pair and Stream:

type a � b

µ :: pa � bq Ñ pa Ñ bq

API: classes as above, plus Category .

Exploit inverses to calculate instances, e.g.,

µ id ” id

ð id ” µ´1 id

µ pg ˝ f q ” µ g ˝ µ f

ð g ˝ f ” µ´1 pµ g ˝ µ f q

Then simplify/optimize.

Conal Elliott Denotational Design LambdaJam 2015 43 / 58

Page 44: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: lists with a bonus

data ListX a b “ Done b | Cons a pListX a bq

Denotation:

µ :: ListX a b Ñ pra s, bq

µ pDone bq “ pr s, bq

µ pCons a asbq “ pa : as, bq where pas, bq “ µ asb

Exercise: instances, including

instance Monad pListX aq where ...

Then generalize from lists to arbitrary monoid.

Conal Elliott Denotational Design LambdaJam 2015 44 / 58

Page 45: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Example: linear transformations

Assignment:

Represent linear transformations

Scalar, non-scalar domain & range, identity and composition

Plan:

Interface

Denotation

Representation

Calculation (implementation)

Conal Elliott Denotational Design LambdaJam 2015 45 / 58

Page 46: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Interface and denotation

Interface:

type p:(q :: ˚ Ñ ˚ Ñ ˚

scale :: Num s ñ ps :( sqpid :: a :( a

pˆ̋q :: pb :( cq Ñ pa :( bq Ñ pa :( cq

...

Model:type a ( b -- Linear subset of a Ñ b

µ :: pa :( bq Ñ pa ( bq

Specification:

µ pscale sq ” λx Ñ s ˆ x

µ pid ” id

µ pg ˆ̋ f q ” µ g ˝ µ f

...

Conal Elliott Denotational Design LambdaJam 2015 46 / 58

Page 47: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Representation

Start with 1D. Recall partial specification:

µ pscale sq ” λx Ñ s ˆ x

Try a direct data type representation:

data p:(q :: ˚ Ñ ˚ Ñ ˚ where

Scale :: Num s ñ s Ñ ps :( sq -- ...

µ :: pa :( bq Ñ pa ( bq

µ pScale sq “ λx Ñ s ˆ x

Spec trivially satisfied by scale “ Scale.

Others are more interesting.

Conal Elliott Denotational Design LambdaJam 2015 47 / 58

Page 48: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Calculate an implementation

Specification:

µ pid ” id µ pg ˆ̋ f q ” µ g ˝ µ f

Calculation:

id

” λx Ñ x

” λx Ñ 1ˆ x

” µ pScale 1q

µ pScale sq ˝ µ pScale s 1q

” pλx Ñ s ˆ x q ˝ pλx 1 Ñ s 1 ˆ x 1q

” λx 1 Ñ s ˆ ps 1 ˆ x 1q

” λx 1 Ñ pps ˆ s 1q ˆ x 1q

” µ pScale ps ˆ s 1qq

Sufficient definitions:

pid “ Scale 1 Scale s ˆ̋ Scale s 1 “ Scale ps ˆ s 1q

Conal Elliott Denotational Design LambdaJam 2015 48 / 58

Page 49: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Algebraic abstraction

In general,

Replace ad hoc vocabulary with a standard abstraction.

Recast semantics as homomorphism.

Note that laws hold.

What standard abstraction to use for p:(q?

Conal Elliott Denotational Design LambdaJam 2015 49 / 58

Page 50: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Category

Interface:

class Category k where

id :: k a a

p˝q :: k b c Ñ k a b Ñ k a c

Laws:

id ˝ f ” f

g ˝ id ” g

ph ˝ gq ˝ f ” h ˝ pg ˝ f q

Conal Elliott Denotational Design LambdaJam 2015 50 / 58

Page 51: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Linear transformation category

Linear map semantics:

µ :: pa :( bq Ñ pa ( bq

µ pScale sq “ λx Ñ s ˆ x

Specification as homomorphism (no abstraction leak):

µ id ” id

µ pg ˝ f q ” µ g ˝ µ f

Correct-by-construction implementation:

instance Category p:(q where

id “ Scale 1

Scale s ˝ Scale s 1 “ Scale ps ˆ s 1q

Conal Elliott Denotational Design LambdaJam 2015 51 / 58

Page 52: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Laws for free

µ id ” id

µ pg ˝ f q ” µ g ˝ µ fñ

id ˝ f ” f

g ˝ id ” g

ph ˝ gq ˝ f ” h ˝ pg ˝ f q

where equality is semantic. Proofs:

µ pid ˝ f q

” µ id ˝ µ f

” id ˝ µ f

” µ f

µ pg ˝ idq

” µ g ˝ µ id

” µ g ˝ id

” µ g

µ pph ˝ gq ˝ f q

” pµ h ˝ µ gq ˝ µ f

” µ h ˝ pµ g ˝ µ f q

” µ ph ˝ pg ˝ f qq

Works for other classes as well.

Conal Elliott Denotational Design LambdaJam 2015 52 / 58

Page 53: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Higher dimensions

Interface:

pŸq :: pa :( cq Ñ pa :( dq Ñ pa :( c ˆ dq

pŹq :: pa :( cq Ñ pb :( cq Ñ pa ˆ b :( cq

Semantics:

µ pf Ÿ gq ” λa Ñ pf a, g aq

µ pf Ź gq ” λpa, bq Ñ f a ` g b

Conal Elliott Denotational Design LambdaJam 2015 53 / 58

Page 54: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Products and coproducts

class Category k ñ ProductCat k where

type a ˆk b

exl :: k pa ˆk bq a

exr :: k pa ˆk bq b

pŸq :: k a c Ñ k a d Ñ k a pc ˆk dq

class Category k ñ CoproductCat k where

type a `k b

inl :: k a pa `k bq

inr :: k b pa `k bq

pŹq :: k a c Ñ k b c Ñ k pa `k bq c

Similar to Arrow and ArrowChoice classes.

Conal Elliott Denotational Design LambdaJam 2015 54 / 58

Page 55: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Semantic morphisms

µ exl ” exl

µ exr ” exr

µ pf Ÿ gq ” µ f Ÿ µ g

µ inl ” inl

µ inr ” inr

µ pf Ź gq ” µ f Ź µ g

For a ( b,

type a ˆp(q b “ a ˆ b

exl pa, bq “ a

exr pa, bq “ b

f Ÿ g “ λa Ñ pf a, g aq

type a `p(q b “ a ˆ b

inl a “ pa, 0q

inr b “ p0, bq

f Ź g “ λpa, bq Ñ f a ` g b

For calculation, see blog post Reimagining matrices.

Conal Elliott Denotational Design LambdaJam 2015 55 / 58

Page 56: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Full representation and denotation

data p:(q :: ˚ Ñ ˚ Ñ ˚ where

Scale :: Num s ñ s Ñ ps :( sq

p:Ÿq :: pa :( cq Ñ pa :( dq Ñ pa :( c ˆ dq

p:Źq :: pa :( cq Ñ pb :( cq Ñ pa ˆ b :( cq

µ :: pa :( bq Ñ pa ( bq

µ pScale sq “ λx Ñ s ˆ x

µ pf :Ÿ gq “ λa Ñ pf a, g aq

µ pf :Ź gq “ λpa, bq Ñ f a ` g b

Conal Elliott Denotational Design LambdaJam 2015 56 / 58

Page 57: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

Denotational design

Design methodology for typed, purely functional programming:

Precise, simple, and compelling specification.

Informs use and implementation without entangling.

Standard algebraic abstractions.

Free of abstraction leaks.

Laws for free.

Principled construction of correct implementation.

Conal Elliott Denotational Design LambdaJam 2015 57 / 58

Page 58: Denotational Design - from meanings to programsconal.net/talks/denotational-design-lambdajam-2015.pdf · 2016-05-31 · Denotational Design from meanings to programs Conal Elliott

References

Denotational design with type class morphisms

Push-pull functional reactive programming

Functional images (Pan) page with pictures & papers.

Posts on type class morphisms

Reimagining matrices

This workshop

Conal Elliott Denotational Design LambdaJam 2015 58 / 58