how to define things by recursion · 2021. 2. 2. · how to de ne things by recursion alex kavvos...

25
How to define things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Upload: others

Post on 26-Feb-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

How to define things by recursion

Alex Kavvos

Logsem seminar, 11 May 2020

Institut for Datalogi, Aarhus Universitet

Page 2: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Defining functions by recursion

Let

fact : N→ N

fact(n)def= if n = 0 then 1 else n × fact(n − 1)

Is this well-defined?

Operational solution: write an interpreter.

Mathematical solutions:

1. Postulate that “definition by induction” is a thing.

But what about the following function?

f (n)def= if n = 1 then 1 elsif even(n) then f (n/2) else f (3n+1)

2. Write down a little abstract machine. (Implicitly just like 1.)

3. Do a little bit of domain theory. Fun for the whole family!

Page 3: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Embracing higher-order functions

Use λ-abstraction:

fact = λn. if n = 0 then 1 else n × fact(n − 1)

A very common form: a function defined in terms of itself.

Abstract the recursive call:

fact = (λf .λn. if n = 0 then 1 else n × f (n − 1)) fact

This is of the form fact = F (fact), where

F : (N⇀ N)→ (N⇀ N)

F (f ) = λn. if n = 0 then 1 else n × f (n − 1)

where N⇀ N is the set of partial functions on N.

fact is a fixed point of F .

Page 4: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Partiality & Approximation I

F : (N⇀ N)→ (N⇀ N)

F (f ) = λn. if n = 0 then 1 else n × f (n − 1)

A curious phenomenon. If ⊥ : N⇀ N is the undefined function, let

f0def= ⊥ def

= ∅ fn+1def= F (fn)

Observe that

f1 = {(0, 1)}f2 = {(0, 1), (1, 1)}f3 = {(0, 1), (1, 1), (2, 2)}f4 = {(0, 1), (1, 1), (2, 2), (3, 6)}...

Page 5: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Partiality & Approximation II

F : (N⇀ N)→ (N⇀ N)

F (f ) = λn. if n = 0 then 1 else n × f (n − 1)

f0 = ∅f1 = {(0, 1)}f2 = {(0, 1), (1, 1)}f3 = {(0, 1), (1, 1), (2, 2)}f4 = {(0, 1), (1, 1), (2, 2), (3, 6)}

Intuitively, fact is the limit of this sequence. Some observations:

1. fi+1 is consistent with fi .

2. fi+1 is more defined than fi .

Page 6: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

The Subset Order

1. fi+1 is consistent with fi .

2. fi+1 is more defined than fi .

Recall the subset relation between partial functions:

f ⊆ gdef≡ ∀x , y ∈ N. (x , y) ∈ f =⇒ (x , y) ∈ g

g is possibly more defined than f , and agrees with it wherever

both are defined. Writing E ' E ′ for Kleene equality:

f ⊆ gdef≡ ∀x , y ∈ N. f (x) ' y =⇒ g(x) ' y

⊆ is a relation on (N⇀ N). It is a partial order:

reflexive f ⊆ f

transitive f ⊆ g ∧ g ⊆ h =⇒ f ⊆ h

antisymmetric f ⊆ g ∧ g ⊆ f =⇒ f = g

Page 7: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

ω-chains

Notice that F (f ) = λn. if n = 0 then 1 else n × f (n − 1) is

monotonic: a more defined input leads to a more defined output.

f ⊆ g =⇒ F (f ) ⊆ F (g)

We prove by induction that the sequence

f0def= ⊥ fn+1

def= F (fn)

is an ω-chain:

f0 ⊆ f1 ⊆ f2 ⊆ f3 ⊆ . . .

BC: f0def= ∅ ⊆ f1 whatever f1 is.

IS: if fi ⊆ fi+1 then fi+1 = F (fi ) ⊆ F (fi+1) = fi+2 by monotonicity.

Page 8: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Limits

Recap. To define the factorial function:

1. We characterised it as the fixed point of

F (f ) = λn. if n = 0 then 1 else n × f (n − 1).

2. We produced a sequence (fi )i∈ω of approximations to it.

3. These approximations have a sense of purpose: they become

progressively more defined, without contradicting previous

information.

If we take the set

fdef=⋃i∈ω

fi

we find that it is a partial function itself. (Why?)

f is the limit of the sequence (fi )i∈ω

Page 9: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

The Smoking Gun I

It remains to prove that fdef=⋃

i∈ω fi is a fixed point of F .

F (f ) = F

(⋃i∈ω

fi

)= ???

Something is missing.

• f =⋃

i∈ω fi is a huge object: it is defined at all natural

numbers.

• But F (f )(n)def= if n = 0 then 1 else n × f (n − 1) uses the

value of f at a finite number of points.

F does not make any “decisions” based on the entirety of f .

We say that F is continuous.

Page 10: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Continuity

DefinitionA monotonic functional F : (N⇀ N)→ (N⇀ N) is continuous if

for any ω-chain (fi )i∈ω we know that

F

(⋃i∈ω

fi

)=⋃i∈ω

F (fi )

By monotonicity, we always have⋃

i∈ω F (fi ) ⊆ F(⋃

i∈ω fi). It

suffices to check

F

(⋃i∈ω

fi

)⊆⋃i∈ω

F (fi )

That is: F cannot make any decisions based on the whole limit!

ExampleF (f ) = if (f = idN) then λn. 1 else λn. 0 is not continuous.

Page 11: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

The Smoking Gun II

The functional

F (f ) = λn. if n = 0 then 1 else n × f (n − 1)

is “obviously” continuous: it uses f at a finite number of points.

It remains to prove that fdef=⋃

i∈ω fi is a fixed point of F .

F (f ) = F

(⋃i∈ω

fi

)=⋃i∈ω

F (fi ) =⋃i∈ω

fi+1 =⋃i∈ω

fi

(The first term of an ω-chain can be skipped in the union.)

So f is a fixed point.

We may take it as the definition of the factorial function.

Page 12: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

This covers all recursive definitions

Let g : N→ N be a total computable function.

Given the Godel number 〈M〉 of a Turing machine M, read g(〈M〉)as the Godel number 〈N〉 of another TM N (quite possibly

gibberish).

Suppose g is extensional: if TMs M and N compute the same

function, then so do the TMs encoded by g(〈M〉) and g(〈N〉).

ExampleThe function that writes out the source code of

λn. if n = 0 then 1 else n × f (n − 1) when given the source of f .

This defines a functional

Fg : (N⇀ N)→ (N⇀ N)

We call this an effective operation.

Page 13: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

This covers all recursive definitions

Theorem (Myhill & Sherpherdson, 1955)Every effective operation Fg : (N⇀ N)→ (N⇀ N) is

1. monotonic

2. continuous

3. effective on finite functions

Moreover, every such functional is an effective operation.

The last condition means: there is a program that given the full

list of input-output pairs of a finite function

θdef= {(x1, y1), . . . , (xn, yn)} and some input x computes F (θ)(x).

Thus, any reasonable template/specification has a fixed point.

(Reasonable = there is a TM that when given code meant to run

at the time of a recursive call outputs code for the entire function

definition.)

Page 14: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Abstracting partial functions away

Save the last bit, nothing so far depends on partial functions.

Let v be a partial order on a set D: a reflexive, transitive,

antisymmetric relation. The following is akin to a limit.

Definition (Least upper bound)The least upper bound of S ⊆ D is an element

⊔S ∈ D such that

1. ∀x ∈ S . x v⊔S

2. if ∀x ∈ S . x v z then⊔S v z

ExampleLet W ⊆ P(X ). The least upper bound of W in (P(X ),⊆) is

given by the union⋃W

def= {x ∈ X | ∃S ∈W. x ∈ S}

It is the least set that contains all the sets in W.

Page 15: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

ω-complete partial orders

Definition (ω-complete partial order)A partial order (D,v) is ω-complete just if

1. it has a least element ⊥, so that ∀x ∈ D. ⊥ v x

2. every ω-chain (xi )i∈ω has a least upper bound⊔

i∈ω xi ∈ D.

Let D and E be ω-cpos.

DefinitionA function f : D → E is monotonic if x v y =⇒ f (x) v f (y)

DefinitionA function f : D → E is continuous if for every ω-chain (xi )i∈ω

f

(⊔i∈ω

xi

)=⊔i∈ω

f (xi )

Page 16: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

The Fixed Point Theorem

Theorem (Kleene ≈1935, Tarski 1939)Let f : D → D be a continuous function on an ω-cpo D. Then f

has a least fixed point given by

lfp(f )def=⊔i∈ω

f i (⊥)

Proof.Induction:

(f i (⊥)

)i∈ω is an ω-chain. The lub is a fixed point:

f

(⊔i∈ω

f i (⊥)

)=⊔i∈ω

f (f i (⊥)) =⊔i∈ω

f i+1(⊥) =⊔i∈ω

f i (⊥)

It is the least one. Suppose f (x) = x . Then f k(⊥) v x by

induction. So x is an upper bound for(f k(⊥)

)i∈ω. Hence⊔

i∈ω fi (⊥) v x .

Page 17: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Examples of ω-cpos

powersets (P(X ),⊆). Least upper bounds = unions.

partial functions (N⇀ N,⊆). A sub-cpo of P(N× N).

flat nats N⊥def= {⊥} ∪ N. x v y

def≡ x = ⊥ ∨ x = y

ω-chain are of two forms:

⊥ v ⊥ v ⊥ v . . . (with lub ⊥)

⊥ v ⊥ v · · · v n v n v . . . (with lub n)

streams Σ∞def= finite or infinite sequences over Σ. w v v iff

w is a prefix of v . An ω-chain over Σ = B def= {0, 1}:

ε v 〈0〉 v 〈0, 0〉 v 〈0, 0, 0〉 v . . .

Lub: the infinite sequence 0ω.

Page 18: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Examples of monotonic and continuous functions

Flat booleans: B⊥def= {⊥} ∪ B. x v y

def≡ x = ⊥ ∨ x = y

Define three functions f1, f2, f3 : B∞ → B⊥.

f1(w)def=

1 if w contains a 1

⊥ otherwisef2(w)

def=

1 if w contains a 1

0 if w = 0ω

⊥ otherwise

f3(w)def=

1 if w contains a 1

0 otherwise

• f1 is continuous: it examines the stream element-by-element.

• f2 is monotonic but not continuous: it makes a decision by

looking at the entirety of an infinite stream.

• f3 is just awful.

Page 19: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Summary

Goal: mathematically defining functions by recursion.

Main ideas:

• recursive definitions as fixed points

• the partial order of definedness

• least upper bounds (lub) as limits/completed objects

• monotonic and continuous functions as (i) computational

functions and (ii) acceptable templates for recursive definitions

• the fixed point theorem: constructing fixed points by

iterating continuous functions (can be generalised: if just

monotone, we can iterate transfinitely).

Page 20: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Beyond

• The semantics of PCF: simply-typed λ-calculus + recursion.

• Program logics for recursion: computational induction.

• So far: convergence. But equally important is

approximation. For example, partial functions are algebraic:

f =⋃θ⊆finf

θ. ω-cpos that are continuous, algebraic, . . .

• Semantics of recursive types. In Haskell:

data Tree = Leaf Int | Node Tree Int Tree

Must construct a mathematical ‘space’ X that provides a

solution to the recursive domain equation

X ∼= N⊥ ⊕ (X × N⊥ × X )⊥

• Information Systems: an equivalent presentation.

• Synthetic Domain Theory: a closer connection with

computabiltity.

Page 21: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

Synthetic Guarded Domain Theory

There is another way: take step-indexing seriously. Replace

ω-cpos with sets constructed over time:

P = P(0)r0←− P(1)

r1←− P(2)r2←− . . .

P(i) = values at time i . ri : P(i + 1)→ P(i) trims values.

Delaying a computation:

IP = {∗} !←− P(0)r0←− P(1)

r1←− P(2)r2←− . . .

A causal function f : P → Q consists of a family fi : P(i)→ Q(i)

of functions that is ‘compatible’ with trimming.

TheoremEvery causal function f : IP → P has a guarded fixed point.

Often just as good as domain theory. Excellent for recursive types!

Page 22: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

References i

This presentation is based on lecture notes by Samson Abramsky.

(≈2007).

The history of the fixed point theorem:

• J.-L. Lassez, V.L. Nguyen, and E.a. Sonenberg (1982). “Fixed

point theorems and semantics: a folk tale”. In: Information

Processing Letters 14.3, pp. 112–116. doi:

10.1016/0020-0190(82)90065-5

Standard references on domain theory—a book and a survey:

• V. Stoltenberg-Hansen, I. Lindstrom, and E. R. Griffor

(1994). Mathematical Theory of Domains. Cambridge:

Cambridge University Press

Page 23: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

References ii

• Samson Abramsky and Achim Jung (1994). “Domain

Theory”. In: Handbook of Logic in Computer Science. Ed. by

Samson Abramsky, Dov M. Gabbay, and

Thomas S. E. Maibaum. Vol. 3. Oxford University Press,

pp. 1–168

Possibly the most clear and concise reference to PCF/LCF:

• Thomas Streicher (2006). Domain-theoretic Foundations of

Functional Programming. World Scientific

Page 24: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

References iii

A really unusual and fascinating book on (a) the connections of

domain theory with topology, and (b) the intuitive meanings of

many domain-theoretic and topological concepts in Haskell:

• M Escardo (Nov. 2004). “Synthetic Topology of Data Types

and Classical Spaces”. en. In: Electronic Notes in Theoretical

Computer Science 87, pp. 21–156. doi:

10.1016/S1571-0661(04)05135-7

A very similar blog post:

http://math.andrej.com/2008/11/21/

a-haskell-monad-for-infinite-search-in-finite-time/

Page 25: How to define things by recursion · 2021. 2. 2. · How to de ne things by recursion Alex Kavvos Logsem seminar, 11 May 2020 Institut for Datalogi, Aarhus Universitet

References iv

The source of all synthetic guarded domain theory:

• Lars Birkedal et al. (2012). “First steps in synthetic guarded

domain theory: step-indexing in the topos of trees”. In:

Logical Methods in Computer Science 8.4. doi:

10.2168/LMCS-8(4:1)2012