A Category Theory Explanation for the Systematicity of Recursive Cognitive

Total Page:16

File Type:pdf, Size:1020Kb

A Category Theory Explanation for the Systematicity of Recursive Cognitive Categorial compositionality continued (further): A category theory explanation for the systematicity of recursive cognitive capacities Steven Phillips ([email protected]) Mathematical Neuroinformatics Group, National Institute of Advanced Industrial Science and Technology (AIST), Tsukuba, Ibaraki 305-8568 JAPAN William H. Wilson ([email protected]) School of Computer Science and Engineering, The University of New South Wales, Sydney, New South Wales, 2052 AUSTRALIA Abstract together afford cognition) whereby cognitive capacity is or- ganized around groups of related abilities. A standard exam- Human cognitive capacity includes recursively definable con- cepts, which are prevalent in domains involving lists, numbers, ple since the original formulation of the problem (Fodor & and languages. Cognitive science currently lacks a satisfactory Pylyshyn, 1988) has been that you don’t find people with the explanation for the systematic nature of recursive cognitive ca- capacity to infer John as the lover from the statement John pacities. The category-theoretic constructs of initial F-algebra, catamorphism, and their duals, final coalgebra and anamor- loves Mary without having the capacity to infer Mary as the phism provide a formal, systematic treatment of recursion in lover from the related statement Mary loves John. An in- computer science. Here, we use this formalism to explain the stance of systematicity is when a cognizer has cognitive ca- systematicity of recursive cognitive capacities without ad hoc assumptions (i.e., why the capacity for some recursive cogni- pacity c1 if and only if the cognizer has cognitive capacity tive abilities implies the capacity for certain others, to the same c2 (see McLaughlin, 2009). So, e.g., systematicity is evident explanatory standard used in our account of systematicity for where one has the capacity to remove the jokers if and only if non-recursive capacities). The presence/absence of an initial algebra/final coalgebra implies the presence/absence of all sys- one has the capacity to remove the aces (assuming, of course, tematically related recursive capacities in that domain. This one has the capacity to identify jokers and aces). formulation also clarifies the theoretical relationship between recursive cognitive capacities. In particular, the link between The classical explanation for systematicity has two compo- number and language does not depend on recursion, as such, nents: (1) combinatorial syntactically structured representa- but on the underlying functor on which the group of recursive capacities is based. Thus, many species (and infants) can em- tions; and (2) processes that are sensitive to (i.e., compatible ploy recursive processes without having a full-blown capacity with) those syntactic structures. In a classical cognitive ar- for number and language.1 chitecture, mental representations of constituent entities (e.g., Keywords: systematicity; category theory; endofunctor, F- John, Mary) are tokened (instantiated) whenever the mental (co)algebra; (final) initial algebra; universal construction; cata- representations of their complex hosts (e.g., John loves Mary) morphism; anamorphism; classicism; connectionism are tokened, with the meaning of a complex host represen- tation obtained (recursively) from the meaning assigned to Introduction its constituent mental representations and their syntactic rela- Many cognitive domains include recursively definable con- tionships. By analogy to language, this form of mental repre- cepts (i.e., concepts defined with reference to themselves), sentation is called a language of thought (LoT) (Fodor, 1975). such as domains involving lists, or languages. In card games, for example, a deck of cards can be defined (recursively) as a The three aspects of systematicity, i.e., systematicity of rep- top card (perhaps turned face up to reveal its value) and a (re- resentation, systematicity of inference, and compositionality maining) deck of cards. To include finite decks, the definition of representation (Fodor & Pylyshyn, 1988), can often be de- has an alternative clause specifying an empty deck; that is, a rived from classical cognitive architectures, because the same deck is either empty, or contains a top card and a (smaller) component processes are often used for each and every mem- deck. Operations on recursively defined concepts may also ber of a group of systematically-related capacities. For in- be defined recursively. For example, removing jokers from stance, a classical system has the capacity to represent John a deck of cards can be defined (recursively) as removing the loves Mary if and only if the system has a capacity to repre- top card if it is a joker and then removing jokers from the sent Mary loves John when the common component process ! remaining deck of cards. Given that you don’t find people is something like a production rule: S Agent loves Patient who can remove the jokers from a hand of seven cards with- (where John and Mary are produced from Agent and Patient out being able to remove jokers from a deck of fifty-three, by other production rules)—systematicity of representation. recursion-related capacities are further instances (see below) Likewise, a classical system has the capacity to infer John of the systematic nature of human cognition. as the lover in John loves Mary if and only if it has the ca- Systematicity is a property of human cognitive architec- pacity to infer Mary as the lover in Mary loves John given ture (i.e., the basic processes and modes of composition that a common process that is sensitive to the syntactic struc- ture whereby the lover constituent is represented by the first 1This paper is a short version of Phillips and Wilson (2012). token—systematicity of inference. And, again, the capacity 869 to assign the semantic content of John being the lover of Mary any component processes, and so do not provide a basis to the representation John loves Mary if and only if there is for systematicity, even though systematicity could be sup- the capacity to assign the semantic content of Mary being the ported when both tasks are implemented in either the first lover of John to the representation Mary loves John derives style only, or the second style only. Notice that we are not from the tokening principle (above) mediating classical repre- unfairly stressing classical theory by apportioning capacity sentations and processes: the process for juxtaposing tokens at the level of constituents—systematicity concerns “molec- (symbols) John, loves, and Mary to form John loves Mary ular”, not “atomic” capacities (Fodor & Pylyshyn, 1988). with corresponding semantic content is the same process that Rather, given constituent capacities lower and higher, clas- is used to form Mary loves John with corresponding content. sical theory admits two independent compositional forms, as Classical compositionality would seem to provide an el- the example illustrates. egant explanation for systematicity with regard to recursive In this paper, we extend our category theory explanation capacities, even though it fails to provide a full account of to recursive capacities using universal constructions called an systematicity generally (Aizawa, 2003).2 For recursive defi- initial F-algebra and a final F-coalgebra, which have been nitions, like the deck of cards, one self-referencing rule typ- extensively developed in computer science as a theoretical ba- ically covers all cases (bar the terminating case, such as the sis for recursive computations (Manes & Arbib, 1986). Our empty deck). For example, removing jokers from a single previous work (Phillips & Wilson, 2010, 2011) dealt with hand, or an entire deck invokes the same component process. non-recursive domains using a kind of universal construc- The two tasks only differ in the number of recursive steps. tion called adjoint functors—a functor is a way relating cate- gories, which can be viewed as a way of constructing objects Classical, but not systematically recursive and morphisms from one category based on those in another. However, the classical explanation with regard to recursive The current work uses endofunctors, which relate categories capacities still suffers the same general problem that it suffers to themselves, hence their relevance to recursion. for non-recursive capacities. To illustrate, suppose one card game requires removing the lowest value card in the hand Category theory: F-(co)algebras dealt, while another card game requires removing the highest A category theory treatment of recursion starts with the con- value card. Suppose the following recursive procedure, low- cept of an F-algebra constructed on an endofunctor F.3 est, for identifying the lowest valued card in a deck of cards Definition (F-algebra). F C ! C F- (containing at least one card): For an endofunctor : , an algebra is a pair (A;a), where A is an object and a : F(A) ! A lowest(c : cs) = lower(c;lowest(cs)) is a morphism in C. ( ) = × lowest(c : []) = c For example, if F A A A, then the addition operator + : A × A 7! A is an F-algebra. where a deck of cards c : cs is represented by a recursively Definition (F-algebra homomorphism). An F-algebra ho- defined list with c as the top card and cs as the remaining momorphism h : (A;a) ! (B;b) is a morphism h : A ! B (in deck, [] is the empty deck, and lower returns the lower of two C) such that the following diagram commutes: cards. Suppose, also, the following classical non-recursive a / procedure, highest, for identifying the highest valued card: F(A) A (1) highest(cs) = (i;high) (0;undefined) F(h) h while i < n do F(B) / b B (i;high) (i + 1;higher(high;csi)) return high That is, h ◦ a = b ◦ F(h). ! where deck cs is represented by an array of n cards with po- Definition (F-algebra category). For endofunctor F : C a sition indexed by i (i.e., cs is the ith card), high maintains C, an F-algebra category Alg(F) has F-algebras (A; ) for i a ! b a representation of the (currently) highest card, higher re- objects, and F-algebra homomorphisms h : (A; ) (B; ) turns the higher of two cards (undefined is some value guar- for morphisms.
Recommended publications
  • NICOLAS WU Department of Computer Science, University of Bristol (E-Mail: [email protected], [email protected])
    Hinze, R., & Wu, N. (2016). Unifying Structured Recursion Schemes. Journal of Functional Programming, 26, [e1]. https://doi.org/10.1017/S0956796815000258 Peer reviewed version Link to published version (if available): 10.1017/S0956796815000258 Link to publication record in Explore Bristol Research PDF-document University of Bristol - Explore Bristol Research General rights This document is made available in accordance with publisher policies. Please cite only the published version using the reference above. Full terms of use are available: http://www.bristol.ac.uk/red/research-policy/pure/user-guides/ebr-terms/ ZU064-05-FPR URS 15 September 2015 9:20 Under consideration for publication in J. Functional Programming 1 Unifying Structured Recursion Schemes An Extended Study RALF HINZE Department of Computer Science, University of Oxford NICOLAS WU Department of Computer Science, University of Bristol (e-mail: [email protected], [email protected]) Abstract Folds and unfolds have been understood as fundamental building blocks for total programming, and have been extended to form an entire zoo of specialised structured recursion schemes. A great number of these schemes were unified by the introduction of adjoint folds, but more exotic beasts such as recursion schemes from comonads proved to be elusive. In this paper, we show how the two canonical derivations of adjunctions from (co)monads yield recursion schemes of significant computational importance: monadic catamorphisms come from the Kleisli construction, and more astonishingly, the elusive recursion schemes from comonads come from the Eilenberg-Moore construction. Thus we demonstrate that adjoint folds are more unifying than previously believed. 1 Introduction Functional programmers have long realised that the full expressive power of recursion is untamable, and so intensive research has been carried out into the identification of an entire zoo of structured recursion schemes that are well-behaved and more amenable to program comprehension and analysis (Meijer et al., 1991).
    [Show full text]
  • Abstract Nonsense and Programming: Uses of Category Theory in Computer Science
    Bachelor thesis Computing Science Radboud University Abstract Nonsense and Programming: Uses of Category Theory in Computer Science Author: Supervisor: Koen Wösten dr. Sjaak Smetsers [email protected] [email protected] s4787838 Second assessor: prof. dr. Herman Geuvers [email protected] June 29, 2020 Abstract In this paper, we try to explore the various applications category theory has in computer science and see how from this application of category theory numerous concepts in computer science are analogous to basic categorical definitions. We will be looking at three uses in particular: Free theorems, re- cursion schemes and monads to model computational effects. We conclude that the applications of category theory in computer science are versatile and many, and applying category theory to programming is an endeavour worthy of pursuit. Contents Preface 2 Introduction 4 I Basics 6 1 Categories 8 2 Types 15 3 Universal Constructions 22 4 Algebraic Data types 36 5 Function Types 43 6 Functors 52 7 Natural Transformations 60 II Uses 67 8 Free Theorems 69 9 Recursion Schemes 82 10 Monads and Effects 102 11 Conclusions 119 1 Preface The original motivation for embarking on the journey of writing this was to get a better grip on categorical ideas encountered as a student assistant for the course NWI-IBC040 Functional Programming at Radboud University. When another student asks ”What is a monad?” and the only thing I can ex- plain are its properties and some examples, but not its origin and the frame- work from which it comes. Then the eventual answer I give becomes very one-dimensional and unsatisfactory.
    [Show full text]
  • Recursion Patterns As Hylomorphisms
    Recursion Patterns as Hylomorphisms Manuel Alcino Cunha [email protected] Techn. Report DI-PURe-03.11.01 2003, November PURe Program Understanding and Re-engineering: Calculi and Applications (Project POSI/ICHS/44304/2002) Departamento de Inform´atica da Universidade do Minho Campus de Gualtar — Braga — Portugal DI-PURe-03.11.01 Recursion Patterns as Hylomorphisms by Manuel Alcino Cunha Abstract In this paper we show how some of the recursion patterns typically used in algebraic programming can be defined using hylomorphisms. Most of these def- initions were previously known. However, unlike previous approaches that use fixpoint induction, we show how to derive the standard laws of each recursion pattern by using just the basic laws of hylomorphisms. We also define the accu- mulation recursion pattern introduced by Pardo using a hylomorphism, and use this definition to derive the strictness conditions that characterize this operator in the presence of partiality. All definitions are implemented and exemplified in Haskell. 1 Introduction The exponential growth in the use of computers in the past decades raised important questions about the correctness of software, specially in safety critical systems. Compared to other areas of engineering, software engineers are still very unfamiliar with the mathematical foundations of computation, and tend to approach programming more as (black) art and less as a science [5]. Ideally, final implementations should be calculated from their specifications, using simple laws that relate programs, in the same way we calculate with mathematical expressions in algebra. The calculational approach is particular appealing in the area of functional programming, since referential transparency ensures that expressions in func- tional programs behave as ordinary expressions in mathematics.
    [Show full text]
  • A Category Theory Primer
    A category theory primer Ralf Hinze Computing Laboratory, University of Oxford Wolfson Building, Parks Road, Oxford, OX1 3QD, England [email protected] http://www.comlab.ox.ac.uk/ralf.hinze/ 1 Categories, functors and natural transformations Category theory is a game with objects and arrows between objects. We let C, D etc range over categories. A category is often identified with its class of objects. For instance, we say that Set is the category of sets. In the same spirit, we write A 2 C to express that A is an object of C. We let A, B etc range over objects. However, equally, if not more important are the arrows of a category. So, Set is really the category of sets and total functions. (There is also Rel, the category of sets and relations.) If the objects have additional structure (monoids, groups etc.) then the arrows are typically structure-preserving maps. For every pair of objects A; B 2 C there is a class of arrows from A to B, denoted C(A; B). If C is obvious from the context, we abbreviate f 2 C(A; B) by f : A ! B. We will also loosely speak of A ! B as the type of f . We let f , g etc range over arrows. For every object A 2 C there is an arrow id A 2 C(A; A), called the identity. Two arrows can be composed if their types match: if f 2 C(A; B) and g 2 C(B; C ), then g · f 2 C(A; C ).
    [Show full text]
  • Lambda Jam 2018-05-22 Amy Wong
    Introduction to Recursion schemes Lambda Jam 2018-05-22 Amy Wong BRICKX [email protected] Agenda • My background • Problem in recursion • Fix point concept • Recursion patterns, aka morphisms • Using morphisms to solve different recursion problems • References of further reading • Q & A My background • Scala developer • Basic Haskell knowledge • Not familiar with Category Theory • Interested in Functional Programming Recursion is ubiquitous, however, recusive calls are also repeatedly made Example 1 - expression data Expr = Const Int | Add Expr Expr | Mul Expr Expr eval :: Expr -> Int eval (Const x) = x eval (Add e1 e2) = eval e1 + eval e2 eval (Mul e1 e2) = eval e1 * eval e2 Evaluate expression > e = Mul ( Mul (Add (Const 3) (Const 0)) (Add (Const 3) (Const 2)) ) (Const 3) > eval e > 45 Example 2 - factorial factorial :: Int -> Int factorial n | n < 1 = 1 | otherwise = n * factorial (n - 1) > factorial 6 > 720 Example 3 - merge sort mergeSort :: Ord a => [a] -> [a] mergeSort = uncurry merge . splitList where splitList xs | length xs < 2 = (xs, []) | otherwise = join (***) mergeSort . splitAt (length xs `div` 2) $ xs > mergeSort [1,2,3,3,2,1,-10] > [-10,1,1,2,2,3,3] Problem • Recursive call repeatedly made and mix with the application-specific logic • Factoring out the recursive call makes the solution simpler Factor out recursion • Recursion is iteration of nested structures • If we identify abstraction of nested structure • Iteration on abstraction is factored out as pattern • We only need to define non-recursive function for application
    [Show full text]
  • Constructively Characterizing Fold and Unfold*
    Constructively Characterizing Fold and Unfold? Tjark Weber1 and James Caldwell2 1 Institut fur¨ Informatik, Technische Universit¨at Munchen¨ Boltzmannstr. 3, D-85748 Garching b. Munchen,¨ Germany [email protected] 2 Department of Computer Science, University of Wyoming Laramie, Wyoming 82071-3315 [email protected] Abstract. In this paper we formally state and prove theorems charac- terizing when a function can be constructively reformulated using the recursion operators fold and unfold, i.e. given a function h, when can a function g be constructed such that h = fold g or h = unfold g? These results are refinements of the classical characterization of fold and unfold given by Gibbons, Hutton and Altenkirch in [6]. The proofs presented here have been formalized in Nuprl's constructive type theory [5] and thereby yield program transformations which map a function h (accom- panied by the evidence that h satisfies the required conditions), to a function g such that h = fold g or, as the case may be, h = unfold g. 1 Introduction Under the proofs-as-programs interpretation, constructive proofs of theorems re- lating programs yield \correct-by-construction" program transformations. In this paper we formally prove constructive theorems characterizing when a function can be formulated using the recursion operators fold and unfold, i.e. given a func- tion h, when does there exist (constructively) a function g such that h = fold g or h = unfold g? The proofs have been formalized in Nuprl's constructive type theory [1, 5] and thereby yield program transformations which map a function h { accompanied by the evidence that h satisfies the required conditions { to a function g such that h = fold g or, as the case may be, h = unfold g.
    [Show full text]
  • Problem Set 3
    Problem Set 3 IAP 2020 18.S097: Programming with Categories Due Friday January 31 Good academic practice is expected. In particular, cooperation is encouraged, but assignments must be written up alone, and collaborators and resources consulted must be acknowledged. We suggest that you attempt all problems, but we do not expect all problems to be solved. We expect some to be easier if you have more experience with mathematics, and others if you have more experience with programming. The problems in this problem set are in general a step more difficult than those in previous problem sets. Nonetheless, the guideline remains that five problems is a good number to attempt, write up, and submit as homework. Question 1. Pullbacks and limits. Products and terminal objects are examples of limits. Another example is the f g pullback. Let C be a category, and let X −! A − Y be a pair of morphisms in C. The f g pullback of X −! A − Y is an object X ×A Y and a pair of morphisms π1 : X ×A Y ! X and π2 : X ×A Y ! Y such that for all commuting squares C h X k f Y g A there is a unique map u: C ! X ×A Y such that C h u π1 X ×A Y X k π2 f Y g A commutes. We'll think about pullbacks in the category Set of sets and functions. ! ! (a) What is the pullback of the diagram N −! 1 − B? (b) What is the pullback of the diagram X −!! 1 −! Y ? 1 isEven yes (c) What is the pullback of the diagram N −−−−! B −− 1? Here N is the set of natural numbers B = fyes; nog, and isEven: N ! B answers the question \Is n even?".
    [Show full text]
  • Cognitive Architecture and Second-Order
    Cognitive architecture and second-order systematicity: categorical compositionality and a (co)recursion model of systematic learning Steven Phillips ([email protected]) Mathematical Neuroinformatics Group, National Institute of Advanced Industrial Science and Technology (AIST), Tsukuba, Ibaraki 305-8568 JAPAN William H. Wilson ([email protected]) School of Computer Science and Engineering, The University of New South Wales, Sydney, New South Wales, 2052 AUSTRALIA Abstract each other. An example that is pertinent to the classical ex- planation is the learning (or memorization) of arbitrary asso- Systematicity commonly means that having certain cognitive capacities entails having certain other cognitive capacities. ciations. For instance, if one has the capacity to learn (mem- Learning is a cognitive capacity central to cognitive science, orize) that the first day of the Japanese financial year is April but systematic learning of cognitive capacities—second-order 1st, then one also has the capacity to learn (memorize) that systematicity—has received little investigation. We proposed associative learning as an instance of second-order systematic- the atomic number of carbon is 6. This example is a legiti- ity that poses a paradox for classical theory, because this form mate instance of systematicity (at the second level) given that of systematicity involves the kinds of associative constructions systematicity has been characterized as equivalence classes that were explicitly rejected by the classical explanation. In fact, both first and second-order forms of systematicity can of cognitive capacities (McLaughlin, 2009). be derived from the formal, category-theoretic concept of uni- Elsewhere (Phillips & Wilson, submitted), we argue that versal morphisms to address this problem.
    [Show full text]
  • Recursion Parameterised by Monads: Characterisation and Examples
    Recursion Parameterised by Monads: Characterisation and Examples Johan Glimming [email protected] Stockholm University (KTH) Sweden 9 December 2003 ¢ £ ¡ ¡ ¡ 1 • • Explain the required lifting from F-algebras to FM -algebras [Beck 1969, Fokkinga 1994, Pardo 2001]. • Conclude by (briefly) describing on-going research on the semantics of objects with method update [Glimming, Ghani 2003]. Aims • Describe the extension of folds to monadic folds, and present state monads via example. ¢ £ ¡ ¡ ¡ J. GLIMMING 2 • • Conclude by (briefly) describing on-going research on the semantics of objects with method update [Glimming, Ghani 2003]. Aims • Describe the extension of folds to monadic folds, and present state monads via example. • Explain the required lifting from F-algebras to FM -algebras [Beck 1969, Fokkinga 1994, Pardo 2001]. ¢ £ ¡ ¡ ¡ J. GLIMMING 2 • Aims • Describe the extension of folds to monadic folds, and present state monads via example. • Explain the required lifting from F-algebras to FM -algebras [Beck 1969, Fokkinga 1994, Pardo 2001]. • Conclude by (briefly) describing on-going research on the semantics of objects with method update [Glimming, Ghani 2003]. ¢ £ ¡ ¡ ¡ J. GLIMMING 2 • Folds, Monads, and Monadic Folds ¢ £ ¡ ¡ ¡ J. GLIMMING 3 • Recursion = fold • Structural recursion is captured by a combinator called fold, i.e. foldList , foldNat , foldTree, ... sum [] = 0 sum x:xs = x + sum xs • Let List denote lists of natural numbers, e.g. [881,883,887]. ¢ £ ¡ ¡ ¡ J. GLIMMING 4 • • (Nat; [0; +]) forms an algebra of the same pattern functor as (List; [[]; :]). • × × ! × ! foldList has type τ (τ τ τ) List τ. • Write ([f ])F for fold/catamorphism. f can be [0; +]; [[x]; :]; ::: Recursion = fold • The important part of this schema is 0 : τ and + : τ × τ ! τ where τ is Nat for sum.
    [Show full text]
  • Chapter 3 Recursion in the Pointfree Style
    Chapter 3 Recursion in the Pointfree Style How useful from a programmer’s point of view are the abstract concepts presented in the previous chapter? Recall that a table was presented — table 2.1 — which records an analogy between abstract type notation and the corresponding data- structures available in common, imperative languages. This analogy will help in showing how to extend the abstract notation studied thus far towards a most important field of programming: recursion. This, however, will be preceeded by a simpler introduction to the subject rooted on very basic and intuitive notions of mathematics. 3.1 Motivation Where do algorithms come from? From human imagination only? Surely not — they actually emerge from mathematics. In a sense, in the same way one may say that hardware follows the laws of physics (eg. semiconductor electronics) one might say that software is governed by the laws of mathematics. This section provides a naive introduction to algorithm analysis and synthesis by showing how a quite elementary class of algorithms — equivalent to for-loops in C or any other imperative language — arise from elementary properties of the underlying maths domain. We start by showing how the arithmetic operation of multiplying two natural numbers (in N0) is a for-loop which emerges solely from the algebraic properties 63 64 CHAPTER 3. RECURSION IN THE POINTFREE STYLE of multiplication: a 0 = 0 × a 1 = a (3.1) a × (b + c) = a b + a c × × × These properties are known as the absorption, unit and distributive properties of multiplication, respectively. Start by making c := 1 in the third (distributive) property, obtaining a (b + × 1) = a b + a 1, and then simplify.
    [Show full text]
  • New Approaches in Functional Programming Using Algebras and Coalgebras
    New approaches in functional programming using algebras and coalgebras Viliam Slodičák, Pavol Macko Department of Computers and Informatics Faculty of Electrical Engineering and Informatics Technical University of Koˇsice ETAPS - Workshop on generative technologies Saarbrücken, 27.03.2011 Viliam Slodičák, Pavol MackoNew approaches in functional programming using algebras and coalgebras 1/27 Basic Concepts: Category theory Program is defined as data structures and algorithms. In developing large scale programs we always have to apply several mathematical theories. The goal of programming is then to formulate a solution over these theories. Mathematical machines (i.e. computers) are able to make logical reasoning over representations of types. Categories are useful in computer science, where we often use more complex structures not expressible by sets. The relations between objects are expressed by morphisms. Viliam Slodičák, Pavol MackoNew approaches in functional programming using algebras and coalgebras 2/27 Basic Concepts: Category theory Category Ob(C ), objects of category C , e.g. A, B, . .; Morph(C ), morphisms of category C , e.g. f : A → B; identity morphism for each object of C , idA : A → A; composition of morphisms: for f : A → B and g : B → C there is f ◦ g : A → C. Functor is a morphism between categories, F : C → D; maps objects of C to objects of D ; maps morphism C1 → C2 in C to morphism FC1 → FC2 in D. Viliam Slodičák, Pavol MackoNew approaches in functional programming using algebras and coalgebras 3/27 Recursion versus corecursion Recursion in computer programming is exemplified when a function is defined in terms of simpler, often smaller versions of itself.
    [Show full text]
  • Category Theory for Programmers
    Category Theory for Programmers Bartosz Milewski Category Theory for Programmers Bartosz Milewski Version 0.1, September 2017 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (cc by-sa 4.0). Converted to LaTeX from a series of blog posts by Bartosz Milewski. PDF compiled by Igal Tabachnik. Contents Preface xiii I Part One 1 1 Category: The Essence of Composition 2 1.1 Arrows as Functions ................... 2 1.2 Properties of Composition ................ 5 1.3 Composition is the Essence of Programming ...... 8 1.4 Challenges ......................... 10 2 Types and Functions 11 2.1 Who Needs Types? .................... 11 2.2 Types Are About Composability ............. 13 2.3 What Are Types? ..................... 14 2.4 Why Do We Need a Mathematical Model? ....... 17 2.5 Pure and Dirty Functions ................. 20 2.6 Examples of Types ..................... 21 2.7 Challenges ......................... 25 iii 3 Categories Great and Small 27 3.1 No Objects ......................... 27 3.2 Simple Graphs ....................... 28 3.3 Orders ........................... 28 3.4 Monoid as Set ....................... 29 3.5 Monoid as Category .................... 34 3.6 Challenges ......................... 37 4 Kleisli Categories 39 4.1 The Writer Category ................... 44 4.2 Writer in Haskell ..................... 48 4.3 Kleisli Categories ..................... 50 4.4 Challenge ......................... 51 5 Products and Coproducts 53 5.1 Initial Object ........................ 54 5.2 Terminal Object ...................... 56 5.3 Duality ........................... 57 5.4 Isomorphisms ....................... 58 5.5 Products .......................... 60 5.6 Coproduct ......................... 66 5.7 Asymmetry ........................ 70 5.8 Challenges ......................... 73 5.9 Bibliography ........................ 74 6 Simple Algebraic Data Types 75 6.1 Product Types ....................... 76 6.2 Records ..........................
    [Show full text]