Modularising inductive families Josh Ko & Jeremy Gibbons - - PowerPoint PPT Presentation

modularising inductive families
SMART_READER_LITE
LIVE PREVIEW

Modularising inductive families Josh Ko & Jeremy Gibbons - - PowerPoint PPT Presentation

Accepted for WGP11 Modularising inductive families Josh Ko & Jeremy Gibbons Department of Computer Science University of Oxford Dependently Typed Programming workshop 27 August 2011, Nijmegen, The Netherlands Internalism Constraints


slide-1
SLIDE 1

Modularising inductive families

Josh Ko & Jeremy Gibbons

Department of Computer Science University of Oxford

Dependently Typed Programming workshop 27 August 2011, Nijmegen, The Netherlands Accepted for WGP’11

slide-2
SLIDE 2

Internalism

Constraints internalised in datatypes

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m)

slide-3
SLIDE 3

Externalism

Predicates imposed on existing datatypes

data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m (n : Nat) × (n < m)

  • - Σ Nat (λ n ↦ n < m)
slide-4
SLIDE 4

Internalism vs. Externalism

An isomorphism. Coincidence?

(n : Nat) × (n < m) Fin m ≅

slide-5
SLIDE 5

data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m

Internalism vs. Externalism

An isomorphism — no coincidence!

(n : Nat) × (n < m) Fin m ≅ data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m)

slide-6
SLIDE 6
  • rnamentation

Internalism vs. Externalism

Conor McBride’s

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m)

An isomorphism — no coincidence!

(n : Nat) × (n < m) Fin m ≅ data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m

slide-7
SLIDE 7
  • rnamentation

Conor McBride’s

Internalism vs. Externalism

algebraic

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m)

An isomorphism — no coincidence!

(n : Nat) × (n < m) Fin m ≅ data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m

slide-8
SLIDE 8

Algebraic ornamentation

data List [] : List _∷_ : (x : A) List Set where (xs : List : )

To index the type of xs with foldr f e xs ...

f : A B B e : B

slide-9
SLIDE 9

Algebraic ornamentation

data List [] : List _∷_ : (x : A) List Set where : (xs : List)

To index the type of xs with foldr f e xs ...

B

slide-10
SLIDE 10

Algebraic ornamentation

To index the type of xs with foldr f e xs ...

data List [] : List _∷_ : (x : A) List Set where : e (xs : List) B

foldr f e [] ≡ e

slide-11
SLIDE 11

Algebraic ornamentation

To index the type of xs with foldr f e xs ...

data List [] : List _∷_ : (x : A) List Set where : (xs : List ) {b : B} b B e

foldr f e [] ≡ e

slide-12
SLIDE 12

Algebraic ornamentation

To index the type of xs with foldr f e xs ...

data List [] : List _∷_ : (x : A) List Set where : (xs : List ) (f x b)

foldr f e (x ∷ xs) ≡ f x (foldr f e xs) ≡ f x b

{b : B} b e B

foldr f e [] ≡ e

slide-13
SLIDE 13

Algebraic ornamentation

To index the type of xs with length xs ...

data Vec (A : Set) : Nat Set where [] : Vec A zero _∷_ : (x : A) {n : Nat} (xs : Vec A n) Vec A (suc n)

length [] ≡ zero

List A ≅ (n : Nat) × Vec A n

length (x ∷ xs) ≡ suc (length xs) ≡ suc n

slide-14
SLIDE 14

Internalism vs. Externalism

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m)

Conor McBride’s algebraic ornamentation

  • rnamental-

An isomorphism — no coincidence!

(n : Nat) × (n < m) Fin m ≅ data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m

slide-15
SLIDE 15

Datatype-generically

An ornament induces a predicate & an isomorphism.

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m) data Nat : Set where zero : Nat suc : Nat Nat

forget

forget zero = zero forget (suc i) = suc (forget i)

: Fin m Nat

  • rnament
slide-16
SLIDE 16

data _<_ : Nat Nat Set where base : ∀ {m} zero < suc m step : ∀ {m n} n < m suc n < suc m

Datatype-generically

An ornament induces a predicate & an isomorphism.

data Fin : Nat Set where zero : ∀ {m} Fin (suc m) suc : ∀ {m} Fin m Fin (suc m) data Nat : Set where zero : Nat suc : Nat Nat

Fin m ≅ (n : Nat) × (n < m)

underlying natural number

slide-17
SLIDE 17

Example: vectors

vectors = lists with length information

data List (A : Set) : Set data Vec (A : Set) : Nat Set where [] : Vec A zero _∷_ : A ∀ {n} Vec A n Vec A (suc n)

data Length {A} : Nat List A Set where nil : Length zero [] cons : ∀ {x n xs} Length n xs Length (suc n) (x ∷ xs) Vec A n ≅ (xs : List A) × Length n xs

slide-18
SLIDE 18

Example: sorted lists

sorted lists indexed with a lower bound

data Sorted : Nat List Nat Set where nil : ∀ {b} Sorted b [] cons : ∀ {x b} b ≤ x ∀ {xs} Sorted x xs Sorted b (x ∷ xs)

data List Nat : Set [] : List Nat _∷_ : Nat List Nat List Nat

slide-19
SLIDE 19

Example: sorted lists

sorted lists indexed with a lower bound

data List Nat : Set [] : List Nat _∷_ : Nat List Nat List Nat data SList : Nat Set where [] : ∀ {b} SList b _∷_ : (x : Nat) ∀ {b} b ≤ x SList x SList b

data Sorted : Nat List Nat Set where nil : ∀ {b} Sorted b [] cons : ∀ {x b} b ≤ x ∀ {xs} Sorted x xs Sorted b (x ∷ xs) SList b ≅ (xs : List Nat) × Sorted b xs

slide-20
SLIDE 20

Function upgrade

with the help of the isomorphisms

Vec Nat n ≅ (xs : List Nat) × Length n xs insert : Nat List Nat List Nat insert-length : ∀ {x n xs} Length n xs Length (suc n) (insert x xs) ≅

xs : List Nat l : Length n xs insert x xs : List Nat insert-length l : Length (suc n) (insert x xs)

≅ ↦ ↦ vinsert : Nat

  • Vec Nat n

Vec Nat (suc n)

slide-21
SLIDE 21

Vec Nat n ≅ (xs : List Nat) × Length n xs

Function upgrade

with the help of the isomorphisms

insert : Nat List Nat List Nat insert-length : ∀ {x n xs} Length n xs Length (suc n) (insert x xs) vinsert : Nat Vec Nat n Vec Nat (suc n) insert-sorted : ∀ {x b xs} Sorted b xs Sorted (b ⊓ x) (insert x xs) sinsert : (x : Nat) SList b SList (b ⊓ x) SList b ≅ (xs : List Nat) × Sorted b xs

slide-22
SLIDE 22

Sorted vectors

∀ {b} b ∀ {b} b ≤ x x b Nat Nat zero ∀ {n} n (suc n) data SList : Set where nil : SList cons : (x : Nat) SList SList data Vec Nat : Set where [] : Vec Nat _∷_ : Nat Vec Nat Vec Nat

slide-23
SLIDE 23

Sorted vectors

= sorted lists + vectors!

∀ {b} b ∀ {b} b ≤ x x b Nat Nat zero ∀ {n} n (suc n) data SVec : Set where nil : SVec cons : (x : Nat) SVec SVec

slide-24
SLIDE 24

Ornament fusion

corresponds to conjunction of induced predicates

SLen b n xs ≅ Sorted b xs × Length n xs List Nat SList b Vec Nat n SVec b n Sorted b Length n SLen b n

slide-25
SLIDE 25

Ornament fusion

corresponds to conjunction of induced predicates

≅ (xs : List Nat) × SLen b n xs ≅ SVec b n (xs : List Nat) × Sorted b xs × Length n xs

slide-26
SLIDE 26

Function upgrade

with the help of the isomorphisms

SVec b n ≅

xs : List Nat s : Sorted b xs insert x xs : List Nat insert-sorted s : Sorted (b ⊓ x) (insert x xs)

≅ ↦ ↦ svinsert : (x : Nat) SVec b n SVec (b ⊓ x) (suc n)

l : Length n xs insert-length l : Length (suc n) (insert x xs)

↦ ≅ (xs : List Nat) × Sorted b xs × Length n xs

slide-27
SLIDE 27

Summary

It’s all about exploiting the connection between internalism and externalism.

slide-28
SLIDE 28

Summary

  • Datatype-generically, an ornament induces a

predicate and an isomorphism — a raw object satisfying the predicate can be converted to a richer object via the isomorphism.

  • Functions whose properties are proved externally

can be upgraded to an internalist version with the help of the isomorphisms.

slide-29
SLIDE 29

Summary

  • Ornaments can be fused to integrate multiple

constraints into a single datatype; fusion of

  • rnaments corresponds to pointwise conjunction
  • f induced predicates.
  • To upgrade a function to work with a type

synthesised out of composite ornamentation, relevant properties can be proved separately (and reused later).

slide-30
SLIDE 30

Thanks!

Please read our WGP paper!

slide-31
SLIDE 31

Another perspective...

Function upgrade — really worth the effort?

Vec Nat n ≅ (xs : List Nat) × Length n xs insert : Nat List Nat List Nat insert-length : ∀ {x n xs} Length n xs Length (suc n) (insert x xs) ≅

xs : List Nat l : Length n xs insert x xs : List Nat insert-length l : Length (suc n) (insert x xs)

≅ ↦ ↦ vinsert : Nat

  • Vec Nat n

Vec Nat (suc n)

slide-32
SLIDE 32

Composability

Had we followed the more direct path...

sinsert : (x : Nat) SList b SList (b ⊓ x) vinsert : Nat Vec Nat n Vec Nat (suc n) ↦

xs : SList b sinsert x xs : SList (b ⊓ x) vinsert x ys : Vec Nat (suc n)

↦ svinsert : (x : Nat) SVec b n SVec (b ⊓ x) (suc n)

ys : Vec Nat n ↦

The integration doesn’t go through — unless the underlying lists can be shown to be the same. ??

slide-33
SLIDE 33

Pre-/post-conditions

Index bounded by list length

lookup : ∀ {A} (xs : List A) (i : Nat) i < length xs A lookup : ∀ {A} ∀ {n} (xs : Vec A n) (i : Fin n) A

slide-34
SLIDE 34

Pre-/post-conditions

Same underlying data

integrate : ∀ {xs} Sorted b xs Length n xs SLen b n xs integrate : (xs : SList b) (ys : Vec Nat n) forget xs ≡ forget ys SVec b n

Need to expose underlying data as index —

  • rnamental-algebraic ornamentation does exactly this

(and does it systematically).