Estoy empezando a leer acerca de la teoría de categorías, y agradecería mucho que alguien pudiera explicar la conexión entre la contravariancia/covarianza CS y la teoría de categorías. ¿Cuáles serían algunas categorías de ejemplo (es decir, ¿cuáles son sus objetos/morfismos?)? ¿Gracias por adelantado?¿alguien podría explicar la conexión entre el tipo de covarianza/contravarianza y la teoría de categorías?
Respuesta
Un funtor contravariante de $ C $ a $ D $ es exactamente lo mismo que una normal (es decir, covariante) functor de $ C $ a $ D^{op} $, donde $ D^{op} $ es el opposite category de $ D $. Entonces, probablemente sea mejor entender primero las categorías opuestas, ¡entonces entenderás automáticamente los funtores contravariantes!
funtores contravariantes no vienen muy a menudo en el CS, aunque puedo pensar en dos excepciones:
Es posible que haya oído hablar de contravarianza en el contexto de subtipos. Aunque técnicamente es el mismo término, la conexión es muy, muy débil. En la programación orientada a objetos, las clases forman un orden parcial; cada orden parcial es una categoría con "hom-sets binarios": dados dos objetos $ A $ y $ B $, hay exactamente un morfismo $ A \ a B $ iff $ A \ leq B $ (fíjese en la dirección; esta orientación ligeramente confusa es el estándar por razones que no explicaré aquí) y no tiene morfismos en caso contrario.
Tipos parametrizados como, por ejemplo, Función parcial de Scala [-A, Unidad] son funtores de esta categoría simple a sí mismo ... generalmente nos centramos en lo que hacen a los objetos: dada una clase X, Función parcial [X, Unidad] es también una clase. Pero los funtores preservan los morfismos también; en este caso si tuviéramos una subclase Dog of Animal, tendríamos un Morphism Dog $ \ to $ Animal, y el functor preservaría este morfismo, dándonos un morfismo PartialFunction [Animal, Unit] $ \ to $ PartialFunction [Dog, Unidad], diciéndonos que PartialFunction [Animal, Unit] es una subclase de PartialFunction [Dog, Unit]. Si piensas en eso, tiene sentido: supongamos que tienes una situación en la que necesitas una función que funcione en Perros. ¡Una función que funciona en todos los animales ciertamente funcionaría allí!
Dicho esto, utilizar la teoría de categorías completa para hablar de conjuntos parcialmente ordenados es una gran exageración.
Menos común, pero en realidad usa la teoría de categorías: considere la categoría Tipos (Hask) cuyos objetos son los tipos del lenguaje de programación Haskell y donde un morfismo $ \ tau_1 \ a \ tau_2 $ es una función del tipo $ \ tau_1 $ -> $ \ tau_2 $. También hay una categoría de Sentencias (Hask) cuyos objetos son listas de juicios de tipeo $ \ tau_1 \ vdash \ tau_2 $ y cuyos morfismos son pruebas de todos los juicios en una lista usando los juicios de la otra lista como hipótesis. Hay un funtor de los tipos (HASK) a los juicios (HASK) que tiene un Tipos (Hask) -morphism $ f: A \ a B $ a la prueba
B |- Int ---------- ...... ---------- A |- Int
que es un morfismo $ (B \ vdash Int) \ to (A \ vdash Int) $ - observe el cambio de dirección.Básicamente, lo que está diciendo es que si tienes una función que convierte a A en B'a, y una expresión de tipo Int con una variable libre x de tipo B, entonces puedes envolverlo con "let x = fy in. .. "y llegar a una expresión todavía de tipo Int pero cuya única variable libre es del tipo $ A $, no $ B $.
Hay muy buenos videos sobre contravarianza/covarianza en Going deep channel in Microsoft Channel9. Puedes empezar aquí:
- E2E: Brian Beckman and Erik Meijer - Co/Contravariance in Physics and Programming, 1 of 3
- E2E: Brian Beckman and Erik Meijer - Co/Contravariance in Physics and Programming, 2 of 3
- E2E: Brian Beckman and Erik Meijer - Co/Contravariance in Physics and Programming, 3 of n
- E2E: Whiteboard Jam Session with Brian Beckman and Greg Meredith - Monads and Coordinate Systems
- 1. ¿Podría alguien explicar el LDAP?
- 2. ¿Podría alguien explicar la página de inicio de Google JS?
- 3. ¿Podría alguien explicar la vida de un objeto sessionStorage?
- 4. ¿Podría alguien explicar este archivo de make?
- 5. Recursos para aprender la teoría de categorías
- 6. ¿Podría alguien explicar __declspec (desnudo) por favor?
- 7. ¿Podría alguien explicar la diferencia entre una "referencia" y un "puntero" en este caso?
- 8. ¿Podría alguien explicar POR OTRA VEZ
- 9. ¿Alguien podría explicar Spring Security BasePermission.Create?
- 10. ¿Alguien puede explicar la diferencia entre las referencias Fuerte, Suave, Débil y Fantasma y el uso que se le da?
- 11. puede alguien explicar la diferencia
- 12. Forma práctica de explicar "Teoría de la información"
- 13. ¿Alguien puede explicar la diferencia entre el cierre y las funciones anónimas?
- 14. ¿Podría alguien explicar lo que realmente hace la declaración MERGE en Oracle?
- 15. ¿Alguien puede explicar este tipo de deferencia C++?
- 16. ¿Podría explicar el orden de bloqueo?
- 17. ¿Alguien puede explicar el atributo conf de la dependencia ivy.xml?
- 18. ¿Alguien puede explicar el attr?
- 19. ¿Alguien puede explicar la paradoja Class.superclass.class.superclass?
- 20. ¿Alguien puede explicar el mapeo de servlets?
- 21. ¿Alguien puede explicar la herencia prototípica de javascript?
- 22. Podría alguien darme un ejemplo de la aplicación node.js
- 23. ¿Podría alguien explicarme ASP.NET MVC?
- 24. ¿Puede alguien explicar la forma correcta de usar SBT?
- 25. ¿Alguien puede explicar el propósito y la resolución de CA1822 en una acción del controlador?
- 26. Explicar un conflicto aparente entre la precedencia de && y || y el resultado real de una expresión
- 27. ¿Alguien puede explicar OAuth?
- 28. ¿Alguien podría explicar y/o publicar el código C para el algoritmo del filtro de avance kalman?
- 29. ¿Podría explicar estos dos ejemplos de javascript?
- 30. ¿Alguien puede explicar la convención de nomenclatura cruzada de gcc?
Muy, muy agradable de hecho. Gracias por compartir. ¡Espero que salgan con 4 de N algún día! :) –