Draft:Functorial programming

Functorial Programming is a programming paradigm derived from category theory, it is a theoretical framework in computer science and mathematical logic that extends classical type theory by introducing notions of directionality and computation flow into types. Although not originally termed as such, the foundational concepts of Functorial Programming can be traced back to Kosta Došen's seminal work, Cut-elimination in Categories (1999), which explored the intersections of category theory, logic, and computation, particularly through the lenses of cut-elimination.

Background
The concept of type theory has its roots in the work of Bertrand Russell and Alonzo Church, serving as a foundation for formal logic and computer science. However, traditional type theories often focus on the logical consistency and structure of mathematical statements without explicitly accounting for the computational processes or transformations between types. Functorial Programming aims to fill this gap by incorporating directional aspects into type relationships, drawing inspiration from category theory and the principles outlined in Došen's work.

Origins
Kosta Došen's Cut-elimination in Categories introduced the idea of cut-elimination from a categorical perspective, proposing a framework where logical deductions and computational processes could be represented as morphisms in a category. This approach laid the groundwork for thinking about types and computations in a directed manner, leading to the conceptualization of Functorial Programming.

Foundational Concepts
Functorial Programming builds upon several key concepts introduced by Došen:


 * Cut-elimination: The process of simplifying logical proofs by eliminating intermediate steps or 'cuts,' reinterpreted in the context of category theory as the simplification of morphism compositions.
 * Categories and Morphisms: Utilizes the language of category theory to formalize types as objects within a category and computations or transformations as morphisms between these objects.
 * Substructural Logics: A class of logics that Dosen's work aligns with, characterized by their relaxation of structural rules, such as contraction and weakening, which are foundational in classical logic.
 * Yoneda Lemma: A principle in category theory that relates functors to sets of natural transformations, instrumental in Dosen's formulation of Functorial Programming.

Development
Following the publication of Došen's book, researchers in the fields of computer science and logic began to explore the implications of his work for type theory and programming languages. This exploration led to the formal development of Functorial Programming, which explicitly integrates directionality into type relations and computations, offering a new perspective on type systems and functional programming.

Applications
Functorial Programming has potential applications in several areas of computer science, including:


 * Functional Programming: Providing a more robust theoretical foundation for designing and reasoning about functional programs, especially in terms of composability and modularity.
 * Concurrent and Distributed Systems: Modeling and verifying properties of concurrent and distributed systems, where the directionality of computation plays a crucial role.
 * Proof Assistants and Automated Theorem Proving: Enhancing the capabilities of proof assistants and automated theorem provers by leveraging directed types