1 votos

¿Cómo se codifica un programa en una categoría?

Un lenguaje de Tipo 0 (en la jerarquía de Chomsky) es Turing completo y por tanto se pueden codificar todas las máquinas en ellos - sólo se necesita un compilador que lo traduzca al respectivo código máquina. Aparentemente, hay categorías que también representan lenguajes de programación. Entonces, ¿cómo se codifica un programa en una categoría?

Supongo que esto se relaciona más con los lenguajes de programación funcionales. ¿Es (mi idea) todo código de máquina equivalente a algún morfismo? ¿Puedo definir una categoría con suficiente estructura como para que haya funtores a categorías específicas que equivalgan a programas específicos? (Veo que las categorías en la teoría de la computación parecen usarse al menos de dos maneras, una está relacionada con los autómatas, otra con los tipos y las mónadas).

La pregunta surgió al leer cs.stackexchange.com ... ¿es la teoría de las categorías útil para el aprendizaje de la programación funcional? y los enlaces allí, como el tutorial de la categoría Haskell.

3voto

Chris Pressey Puntos 191

No sé cómo dar una respuesta mucho más útil que el comentario de Zhen Lin, pero lo intentaré.

Las categorías son cosas muy generales, y los programas son cosas muy variadas, así que hay muchas, muchas maneras de "codificar" (yo diría "describir") un programa como una categoría. Siempre que se pueda definir un conjunto de objetos que son relevantes para el programa de alguna manera, y un conjunto de morfismos entre aquellos objetos que se cierran bajo composición (y la composición es asociativa), has descrito el programa como una categoría.

Los objetos podrían ser posibles entradas y salidas del programa, y los morfismos podrían representar la forma en que el programa asigna las entradas a las salidas. O bien, supongo que los estados del programa podrían ser los objetos y los morfismos las transiciones permitidas entre esos estados. (El requisito de un morfismo de identidad significa que a un estado se le permitiría la transición a sí mismo, lo que podría ser un poco impar).

Sí, una vez que has descrito tu programa como una categoría, puedes definir funtores entre ella y otras categorías (que pueden ser otros programas), pero tampoco hay una forma "estándar" de hacerlo que yo haya visto. Los objetos y morfismos (y funtores) que elijas influirán en qué tipo de cosas adicionales puedes modelar sobre tu programa una vez que lo hayas descrito como una categoría.

(Tenga en cuenta que he hablado de describir un programa como categoría, ya que parecía que eso era lo que preguntabas, pero ahora no estoy tan seguro. También podría describir una programación idioma como una categoría, en cuyo caso su programa sería simplemente uno de los objetos (o morfismos) de esa categoría).

Editar : Sólo me gustaría añadir que si se trata de describir un programa como un objeto o morfismo en una categoría para un lenguaje de programación (como una función en Hask ), entonces el término "codificar" suena aún menos apropiado. Los objetos en la teoría de las categorías son bastante opacos: no hay manera de examinarlos, excepto para decir cosas sobre los morfismos que se aplican a ellos.

También debo mencionar para completar (aunque sé muy poco al respecto) que cualquier categoría con suficiente estructura soporta un lógica interna que incluso puede ser tan potente como el cálculo lambda (que es Turing-completo); así que existe este sentido (¡muy diferente!) en el que uno puede tener "programas" con respecto a una categoría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X