28 de mayo de 2014

Arena de juego

Un grupo ingenieros de Google desarrollaron un "playground" cuántico: un simulador con un lenguaje llamado QScript bastante intuitivo. Tiene loops, sentencias condicionales, etc, y las principales compuertas cuánticas necesarias para jugar un rato. Sobre todo la sección de ejemplos es muy buena para entender intuitivamente qué hacen las compuertas cuánticas y ver implementados algunos algoritmos importantes como Grover y Shor. Todo esto se completa con una linda visualización gráfica del algoritmo que se está ejecutando.

Les dejo el link (recomiendan verlo con Chrome):


(Gracias a Julián por el link)

27 de abril de 2014

Teoría de tipos homotópica y el axioma de univalencia

Antes que nada, me disculpo por la larga ausencia en el blog. Voy a tratar de comentarles, en este post, sobre un área reciente en teoría de tipos, en la cual me estoy empezando a interesar. No soy experto en el área, así que si hay alguien trabajando en esto, está más que invitado a postear en el blog. En este post sólo comento algunas ideas básicas, y porqué de mi repentino interés en esta teoría.

La teoría de tipos homotópica (o "HoTT" por sus siglas en inglés), es una nueva manera de interpretar la teoría de tipos. Empecemos con algunos conceptos básicos. De la wikipedia:
"En topología, y más precisamente en topología algebraica, dos aplicaciones continuas de un espacio topológico en otro se dicen homotópicas (del griego homos = mismo y topos = lugar) si una de ellas puede "deformarse continuamente" en la otra." -- Wikipedia: Homotopía
En teoría de tipos, se dice que dos tipos son isomorfos si hay una biyección entre ellos: o sea, A≡B si existen f:A→B y g:B→A tal que f∘g=id_B y g∘f = id_A. La idea de la teoría de tipos homotópica es considerar a los tipos A como espacio topológicos, los términos a como puntos en ese espacio, entonces a:A se traduce como a∈A. Una prueba de igualdad de dos términos de tipo A, es simplemente un camino de un punto a otro en ese espacio. Y finalmente una prueba de igualdad entre dos pruebas de igualdad, se interpreta como una homotopía. 

HoTT está planteado con tipos dependientes, donde existe el tipo Id_A(a,b), y una prueba con ese tipo es una prueba de que a=b en A. Pero como Id_A(a,b) en sí es un tipo, podemos probar que p=q en el tipo Id_A(a,b), o sea, podemos probar Id_(Id_A(a,b))(p,q), lo cual significa probar que dos pruebas de igualdad de a y b en el tipo A, son iguales. A eso es a lo que se considerará una homotopía en la interpretación HoTT.

Resumiendo:
Teoría de tiposTeoría de homotopías
tipo Aespacio A
término apunto a
a:Aa∈A
p:Id_A(a,b)camino p:a↦b
g:Id_(Id_A(a,b))(p,q)homotopía g:p⇒q

En particular, en tipos dependientes, los tipos son elementos de un tipo universal U (en realidad, existen diversos U para eliminar paradojas al estilo la de Russell, pero mantengamos la descripción simple). Por lo tanto, se puede probar también que dos tipos son iguales: Id_U(A,B).

Lo interesante del tema: el axioma de univalencia. El axioma es muy simple de escribir, pero tiene grandes implicaciones:  A~B ↔ A=B. O sea, si A y B son equivalentes/homotópicos, entonces A es igual a B (el sentido inverso de la flecha es trivial). O de otra manera, si dos tipos son equivalentes, entonces son iguales.

De dónde nació mi interés en el tema? Yo he estado trabajando en una teoría de tipos simple, módulo isomorfismos: es decir, si dos tipos son isomorfos, en esta teoría se consideran iguales (la versión más actualizada de este paper se encuentra en mi página web). Nuestro trabajo es una interpretación computacional: definimos el cálculo sintácticamente, y mostramos sus propiedades. Claro que no es tan sencillo en HoTT: nosotros usamos tipos simples, HoTT usa tipos dependientes. Nosotros sólo usamos dos conectivos: implicación y conjunción. En ese caso con sólo esos conectivos, sólo existen 4 isomorfismos a considerar. En HoTT, con tipos dependientes, hay que considerar todas las pruebas que se pueden realizar de igualdad. O sea: nuestro trabajo está muy lejos del tema HoTT... pero nos interesa ir hacia allí! Quizá algunas técnicas en nuestro trabajo puedan servir para la teoría de tipos homotópica, y es una dirección que estamos dispuestos a seguir.

A quienes les interese aprender sobre la teoría de tipos homotópica, existe un libro, el cual puede ser descargado gratuitamente de aquí, que es el libro que inició todo. La historia es así: Vladimir Voevodsky es el padre de ésta área, y muy pronto, gente muy reconocida empezó a involucrarse. En 2012-2013, el Institut for Advanced Studies de Princeton organizó un año de trabajo intensivo en ésta nueva área, y de allí salió el libro, que hoy se sigue modificando colaborativamente.

Para quienes se pregunten que tiene que ver todo esto con computación cuántica: pues nada. Yo comenzé con cuántica, me interesé por los tipos vectoriales, como una generalización de cuántica, y el no-determinismo en particular, los cuales me llevaron a los isomorfismos de tipos, a los cuales llegué desde cuántica y ahora me estoy interesando por esta nueva teoría a la cual llegué desde los tipos isomorfos. Sin embargo, hay un hilo conductor, por lo que algunas ideas de cuántica terminan colándose en los otros trabajos, y viceversa.

18 de octubre de 2013

Identificando proposiciones isomorfas... en China

(English below)
Del 3 al 7 de Noviembre, se realizará en el State Key Laboratory del Institute for Software de la Chinese Academy of Science, en Beijing, un workshop del projecto Franco-Chino LOCALI. Allí voy a presentar una charla. Les dejo aquí abajo el título y resumen.

Título: Identificando proposiciones isomorfas

Resumen:
En lambda-cálculo tipado, en lenguajes de programación y en teoría de la prueba, dos tipos A y B se dicen isomorfos, si existen dos funciones \phi:A\Rightarrow B y \psi:B\Rightarrow A tales que \phi\circ\psi=Id_A, y \psi\circ\phi=Id_B. En algunos casos, los tipos isomorfos son considerados iguales. Por ejemplo en teoría de tipos de Martin-Löf, en Cálculo de Construcciones y en Deducción módulo, tipos iguales por definición son identificados. Sin embargo, igualdad por definición es mas débil que isomorfismo y, por ejemplo, los tipos isomorfos A\wedge B y B\wedge A usualmente no son identificados: un término de tipo A\wedge B no tiene tipo B\wedge A.
No identificar esos tipos tiene muchos  inconvenientes, por ejemplo si una biblioteca contiene una prueba de B\wedge A, una llamada a una prueba de A\wedge B no podrá encontrarla, si r y s son pruebas de (A\wedge B)\Rightarrow C y B\wedge A respectivamente, no es posible aplicar r a s para obtener una prueba de C, necesitamos explícitamente aplicar una función de tipo(B\wedge A)\Rightarrow (A\wedge B) a s antes de aplicar r a este término. Esto ha llevado a un auge de proyectosde investigación con el objetivo de identificar de una forma u otra tipos isomorfos en teoría de tipos, por ejemplo con el axioma de univalencia.
Aquí introducimos una extensión de lambda cálculo simplemente tipado con pares, donde tipos isomorfos son identificados. En este cálculo nos enfocamos en tres isomorfismos: conmutatividad y asociatividad de la conjunción, y distributividad de la implicación sobre la conjunción. Identificar tipos requiere también identificar términos via una relación de equivalencia, lo cual deriva en un cálculo interesante, relacionado con varios cálculos algebraicos y no deterministas conocidos. En esta charla voy a presentar el sistema y una prueba de normalización basada en una adaptación no trivial de  la técnica de candidatos de reducibilidad. Además, voy a mostrar algunas ideas en progreso para intruducir la currificación: (A\wedge B)\Rightarrow C \equiv A\Rightarrow B\Rightarrow C.


From the 3rd to the 7th of November, a workshop of the ANRI LOCALI Project will take place at the State Key Laboratory of the Institute for Software of the Chinese Academy of Science, in Beijing. I will give a talk there. Below you will find the title and abstract of it.

Title: Identifying isomorphic propositions

Abstract:
In typed lambda-calculus, in programming languages, and in proof theory, two types A and B are said to be isomorphic, if there exists two functions \phi:A\Rightarrow B and \psi:B\Rightarrow A such that \phi\circ\psi=Id_A, and \psi\circ\phi=Id_B. In some cases, isomorphic types are identified. For instance, in Martin-Löf's type theory, in the Calculus of Constructions, and in Deduction modulo, definitionally equivalent types are identified. However, definitional equality is weaker than isomorphism and, for example, the isomorphic types A\wedge B and B\wedge A are not usually identified: a term of type A\wedge B does not have type B\wedge A.
Not identifying such types has many drawbacks, for example if a library contains a proof of B\wedge A, a request on a proof of A\wedge B fails to find it, if r and s are proofs of (A\wedge B)\Rightarrow C and B\wedge A respectively, it is not possible to apply r to s to get a proof of C, but we need to explicitly apply a function of type (B\wedge A)\Rightarrow (A\wedge B) to s before we can apply r to this term. This has lead to several projects aiming to identify in a way or another isomorphic types in type theory, for example with the univalence axiom.
We introduce an extension of simply typed lambda calculus with pairs where isomorphic types are identified. In this calculus we have focused on three isomorphisms: associativity and commutativity of conjunction, and the distributivity of implication over conjunction. Identifying some types requires to also identify some terms via an equivalence relation on terms, leading to an interesting calculus, which is related to several known algebraic and non-deterministic calculi. In this talk I will present the system and a proof of normalisation based on a non-trivial adaptation of the reducibility candidates technique. Also I will show some ongoing ideas to introduce the curryfication: (A\wedge B)\Rightarrow C \equiv A\Rightarrow B\Rightarrow C.


Update: The slides