Simulating Codata Types using Coalgebras Anton Setzer Swansea - - PowerPoint PPT Presentation

simulating codata types using coalgebras
SMART_READER_LITE
LIVE PREVIEW

Simulating Codata Types using Coalgebras Anton Setzer Swansea - - PowerPoint PPT Presentation

Simulating Codata Types using Coalgebras Anton Setzer Swansea University, Swansea UK Types 2018, Braga, Portugal 18 June 2018 Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion Anton


slide-1
SLIDE 1

Simulating Codata Types using Coalgebras

Anton Setzer Swansea University, Swansea UK Types 2018, Braga, Portugal 18 June 2018

slide-2
SLIDE 2

Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion

Anton Setzer Simulating Codata Types using Coalgebras 2/ 25

slide-3
SLIDE 3

Coalgebras in Type Theory

Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion

Anton Setzer Simulating Codata Types using Coalgebras 3/ 25

slide-4
SLIDE 4

Coalgebras in Type Theory

Codata Types

◮ Original way of defining infinite (in general non-well-founded)

structures in functional programming are codata types: codata coList : Set where nil : coList cons : N → coList → coList

◮ Define

from : N → coList from n = cons n (from (n + 1))

◮ Problem

◮ Literally taken non-normalising. ◮ Restriction of evaluation to lazy evaluation or similar led to

subject reduction problem in Coq and early versions of Agda.

◮ Proof in [4] that there is no decidable equality on codata types

which would allow pattern matching.

Anton Setzer Simulating Codata Types using Coalgebras 4/ 25

slide-5
SLIDE 5

Coalgebras in Type Theory

Coalgebras

◮ Solution define infinite structures by elimination rules or by their

  • bservations.

◮ Replace Pattern matching by copattern matching [2]. ◮ Example Streams (syntax is desired syntax – Agda uses record types

instead): coalg Stream : Set where head : Stream → N tail : Stream → Stream

◮ Define the stream n, n + 1, n + 2, . . . by copattern matching

from : N → Stream head (from n) = n tail (from n) = from (n + 1)

Anton Setzer Simulating Codata Types using Coalgebras 5/ 25

slide-6
SLIDE 6

Coalgebras in Type Theory

Colists

◮ When applying the above to colists one need to have an observation

which determines for every colist whether it is nil or cons.

◮ Most easily done by using a simultaneous inductive-coinductive

definition. mutual coalg ∞coList : Set where ♭ : ∞coList → coList data coList : Setwhere nil : coList cons : N → ∞coList → coList

Anton Setzer Simulating Codata Types using Coalgebras 6/ 25

slide-7
SLIDE 7

Musical Notation In Agda Reduced to Coalgebras

Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion

Anton Setzer Simulating Codata Types using Coalgebras 7/ 25

slide-8
SLIDE 8

Musical Notation In Agda Reduced to Coalgebras

Examples of Coalgebras in Agda

◮ We have developed lots of coalgebras in Agda:

◮ IO monad in Agda. ◮ Formalisation of CSP in Agda. ◮ Objects (as in object-based programming) in Agda ◮ GUIs in Agda. ◮ Business processes in Agda ◮ Many variants of the above

◮ In some examples definition by several eliminators is the right thing. ◮ In some example one has the pattern as above but needs to add to the

type corresponding to ∞coList extra components.

◮ But most examples follow exactly the same pattern as above. ◮ Musical notation modified by Danielsson [5] was an abbreviation

mechanism in Agda for having the above. (Currently abandoned).

◮ Suggestion: Reduce musical notation to coalgebras. ◮ Musical notation as a syntactic sugar for coalgebra approach.

Anton Setzer Simulating Codata Types using Coalgebras 8/ 25

slide-9
SLIDE 9

Musical Notation In Agda Reduced to Coalgebras

Functions for Introduction Codata like Coalgebras

◮ When defining functions into a codata like coalgebra one defines

mutually two functions: ♯f : A → ∞coList ♭ (♯f a) = f a f : A → coList f a = · · · (referring to ♯f)

◮ Example from musical notation documentation in Agda:

♯map : (N → N) → coList → ∞coList ♭ (♯map f l) = map f l map : (N → N) → coList → coList map f nil = nil map f (cons n l) = cons (f n) (♯map f l)

Anton Setzer Simulating Codata Types using Coalgebras 9/ 25

slide-10
SLIDE 10

Suggested Extension

Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion

Anton Setzer Simulating Codata Types using Coalgebras 10/ 25

slide-11
SLIDE 11

Suggested Extension

∞ as Syntactic Sugar

◮ Whenever one defines a new constant

C : (x1 : A1) (x2 : A2) · · · (xn : An) → Set

  • ne defines simultaneously with any definition involving C

coalg ∞C (x1 : A1) (x2 : A2) · · · (xn : An) : Set where ♭ : ∞C x1 · · · xn → C x1 · · · xn

◮ Whenever one defines a new constant

f : (x1 : A1) (x2 : A2) · · · (xn : An) → C t where C is a constant one defines ♯f : (x1 : A1) (x2 : A2) · · · (xn : An) → ∞C t ♭ (♯f x1 · · · xn) = f x1 · · · xn

Anton Setzer Simulating Codata Types using Coalgebras 11/ 25

slide-12
SLIDE 12

Suggested Extension

∞ as Syntactic Sugar

◮ Whether the following is a good notation needs to be discussed. ◮ However it allows to give an interpretation of Altenkirch et. al.’s

boxed operator [3], where ♯ t is the type of delayed computations.

◮ If C s1 · · · sn is an expression where C is a constant define

∞ (C s1 · · · sn) := ∞C s1 · · · sn

◮ If f s1 · · · sn is an expression where f is a constant define

♯ (f s1 · · · sn) := ♯f s1 · · · sn

◮ In the above C s1 · · · sn and f s1 · · · sn are not evaluated, the right

hand side is evaluated.

◮ Note that ∞ x and ♯ x for variables x is not defined.

Anton Setzer Simulating Codata Types using Coalgebras 12/ 25

slide-13
SLIDE 13

Suggested Extension

Syntactic Sugar

◮ Note that the above is just syntactic sugar. ◮ Type checking and Term checking relies on type and termination

checking of the desugared version.

◮ Should the above definitions not be suitable, the user has access to

the standard coalgebra definitions.

Anton Setzer Simulating Codata Types using Coalgebras 13/ 25

slide-14
SLIDE 14

Suggested Extension

Example: coList, map and from

data coList : Setwhere nil : coList cons : N → ∞ coList → coList map : (N → N) → coList → coList map f nil = nil map f (cons n l) = cons (f n) (♯ (map f l)) from : N → coList from n = cons n (♯ (from (n + 1)))

Anton Setzer Simulating Codata Types using Coalgebras 14/ 25

slide-15
SLIDE 15

Suggested Extension

Sized Types

◮ For coalgebras one needs except for very simple examples sized types. ◮ In case of coList the definition is as follows:

mutual coalg ∞coList {i : Size} : Set where ♭ : {j : Size < i} → ∞coList {i} → coList{j} data coList {i : Size} : Set where nil : coList {i} cons : N → ∞coList {i} → coList {i}

Anton Setzer Simulating Codata Types using Coalgebras 15/ 25

slide-16
SLIDE 16

Suggested Extension

∞, ♯ with Sizes

◮ Whenever one defines a new constant

C : {i : Size} (x1 : A1) (x2 : A2) · · · (xn : An) → Set

  • ne defines simultaneously with any definition involving C

coalg ∞C {i : Size} (x1 : A1) (x2 : A2) · · · (xn : An) : Set where ♭ : {j : Size < i} → ∞C {i} x1 · · · xn → C {j} x1 · · · xn

◮ Whenever one defines a new constant

f : {i : Size} (x1 : A1) (x2 : A2) · · · (xn : An) → C t where C is a constant one defines ♯f : {i : Size} (x1 : A1) (x2 : A2) · · · (xn : An) → ∞C t ♭ (♯f {i} x1 · · · xn) {j} = f {j} x1 · · · xn

Anton Setzer Simulating Codata Types using Coalgebras 16/ 25

slide-17
SLIDE 17

Suggested Extension

IO Interface

data Command : Set where getStr : Command putStr : String → Command Response : Command → Set Response getStr = String Response (putStr s) = ⊤

Anton Setzer Simulating Codata Types using Coalgebras 17/ 25

slide-18
SLIDE 18

Suggested Extension

Example IO

data IO {i : Size} (A : Set) : Set where return : A → IO {i} A exec : (c : Command) (p : Response c → ∞ (IO {i} A)) → IO {i} A copycat : {i : Size} → IO {i} ⊥ copycat = exec getStr λ s → ♯ (exec (putStr s) λ → ♯ copycat)

Anton Setzer Simulating Codata Types using Coalgebras 18/ 25

slide-19
SLIDE 19

Suggested Extension

Object Interface for Cell

data Method : Set where get : Method put : N → Method Result : Method → Set Result get = N Result (put n) = ⊤

Anton Setzer Simulating Codata Types using Coalgebras 19/ 25

slide-20
SLIDE 20

Suggested Extension

Example Object [1]

Object : {i : Size} → Set Object{i} = (m : Method) → IO ∞ (Result m × ♯ (Object{i})) cell : {i : Size} → N → Object {i} cell n get = exec (putStr “get invoked”) λ → ♯ (return (n , ♯ (cell n))) cell n (put m) = exec (putStr “put invoked”) λ → ♯ (return ( , ♯ (cell m)))

Anton Setzer Simulating Codata Types using Coalgebras 20/ 25

slide-21
SLIDE 21

Conclusion

Coalgebras in Type Theory Musical Notation In Agda Reduced to Coalgebras Suggested Extension Conclusion

Anton Setzer Simulating Codata Types using Coalgebras 21/ 25

slide-22
SLIDE 22

Conclusion

Conclusion

◮ Definition of coalgebras by their elimination as a clean approach for

defining “infinite data types” (more precisely well-founded).

◮ Musical notation as syntactic sugar which reduces to coalgebras. ◮ Delayed computations can be interpreted in this setting. ◮ Resulting code is very close to codata types.

Anton Setzer Simulating Codata Types using Coalgebras 22/ 25

slide-23
SLIDE 23

Conclusion

Bibliography I

  • A. Abel, S. Adelsberger, and A. Setzer.

Interactive programming in Agda – Objects and graphical user interfaces. Journal of Functional Programming, 27, Jan 2017. doi 10.1017/S0956796816000319.

  • A. Abel, B. Pientka, A. Setzer, and D. Thibodeau.

Copatterns: Programming infinite structures by observations. In R. Giacobazzi and R. Cousot, editors, Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages, POPL ’13, pages 27–38, New York, NY, USA,

  • 2013. ACM.

Anton Setzer Simulating Codata Types using Coalgebras 23/ 25

slide-24
SLIDE 24

Conclusion

Bibliography II

  • T. Altenkirch, N. Danielsson, A. Löh, and N. Oury.

ΠΣ: Dependent types without the sugar. In M. Blume, N. Kobayashi, and G. Vidal, editors, Functional and Logic Programming, volume 6009 of Lecture Notes in Computer Science, pages 40–55. Springer Berlin / Heidelberg, 2010. http://dx.doi.org/10.1007/978-3-642-12251-4_5.

  • U. Berger and A. Setzer.

Undecidability of equality for codata types, 2018. To appear in proceedings of CMCS’18, available from http://www.cs.swan.ac.uk/~csetzer/articles/CMCS2018/ bergerSetzerProceedingsCMCS18.pdf.

Anton Setzer Simulating Codata Types using Coalgebras 24/ 25

slide-25
SLIDE 25

Conclusion

Bibliography III

  • N. A. Danielsson.

Changes to coinduction, 17 March 2009. Message posted on gmane.comp.lang.agda, available from http://article.gmane.org/gmane.comp.lang.agda/763/.

Anton Setzer Simulating Codata Types using Coalgebras 25/ 25