La théorie des catégories

Après vous avoir présenté les propriétés caractéristiques de la programmation fonctionnelle, et certains langages implémentant ce paradigme de programmation, nous vous proposons aujourd’hui de nous pencher sur les théories mathématiques implémentée par un certain nombre de ces langages. En effet, contrairement aux autres paradigmes de programmation, on peut voir la programmation fonctionnelle comme une implémentation directe de théories mathématiques très abstraites. Celles-ci peuvent être vues comme un design pattern pour ces langages. Nous allons en particulier vous faire découvrir la théorie des catégories qui constitue la brique principale de la programmation fonctionnelle.

Mais qu’est-ce donc que la théorie des catégories ?

 

La théorie des catégories est une théorie mathématique très abstraite qui étudie des structures mathématiques et leurs relations. L’origine de cette théorie vient du constat que certaines classes mathématiques (e.i. : les groupes) présentent des caractéristiques communes. L’intérêt est donc d’identifier ces caractéristiques afin d’établir des relations entre des classes qui n’ont à priori rien en commum. On peut voir la théorie des catégories comme une couche d’abstraction supplémentaire au-dessus des classes mathématiques.

Quelques définitions :

Catégorie

Une catégorie est une structure mathématique très abstraite composée de points et de flèches. Les points peuvent être des éléments ou des ensembles, et les flèches des morphismes respectant la structure de la catégorie.

Morphisme

Un morphisme est généralement défini comme une application entre deux ensembles d’une même structure. Un morphisme conserve cette structure. Dans la théorie des catégories, la définition est élargie. Un morphisme n’est même plus forcément une application sur un ensemble, mais peut être vu comme une flèche entre deux structures mathématiques partageant des caractéristiques communes.

Foncteur

Un foncteur est une généralisation du morphisme. C’est une flèche qui associe un objet d’une catégorie à un objet d’une autre catégorie, mais également un morphisme d’une catégorie à un morphisme d’une catégorie.

 

Et la programmation fonctionnelle dans tout ça ?

En programmation fonctionnelle, une catégorie peut être vue comme un ensemble de types partageant des propriétés communes. Par exemple celle de pouvoir être représenté par une chaine de caractères, d’être ordonné, d’être comparé…

Un des intérêts majeurs d’utiliser la théorie des catégories comme design pattern d’un langage est d’obtenir une extrême modularité du code. En Haskell par exemple, il existe les typeclass. Elles permet de relier des éléments qui n’ont à priori pas de relation entre eux. Le but est donc de définir des typeclass très abstraites dont les structures de données pourront profiter de manière complètement transparente à un grand nombre de types.

Dans les langages de programmation, Haskell est certainement celui qui expose le plus la théorie des catégories. Il est difficile d’utiliser ce langage sans connaître les théories mathématiques sur lesquelles il repose. Les notions de morphismes et de foncteurs sont totalement explicites !

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>