En un hilo reciente en la lista de correo de Agda, surgió la cuestión de las leyes , en la que Peter Hancock hizo un comentario estimulante .
Tengo entendido que las leyes vienen con tipos negativos, es decir. conectivos cuyas reglas de introducción son invertibles. Para deshabilitar para las funciones, Hank sugiere usar un eliminador personalizado, funsplit , en lugar de la regla de aplicación habitual. Me gustaría entender el comentario de Hank en términos de polaridades.
Por ejemplo, hay dos presentaciones tipos Sigma . Existe el eliminador de división tradicional Martin-Löf , en un estilo positivo:
Y hay una versión negativa:
Esta última presentación facilita la obtención de para pares, es decir. para cualquier par (donde == representa la igualdad de definición). En términos de demostrabilidad, esta diferencia no importa: intuitivamente, puede implementar proyecciones con división, o al revés.
Ahora, los tipos son usualmente (y sin controversia, creo) tomados negativamente:
Lo que nos da para funciones: .
Sin embargo, en ese correo, Hank recuerda el eliminador de funsplit (Programación en teoría del tipo ML, [http://www.cse.chalmers.se/research/group/logic/book/], p.56). Se describe en el marco lógico por:
Curiosamente, Nordstrom et al. Motive esta definición diciendo que "[esta] forma alternativa no canónica se basa en el principio de inducción estructural". Hay un fuerte olor a positividad en esta afirmación: las funciones serían 'definidas' por su constructor, .
Sin embargo, no puedo precisar una presentación satisfactoria de esa regla en la deducción natural (o, mejor aún, el cálculo consecuente). El uso (ab) del marco lógico para introducir parece crucial aquí.
Entonces, ¿es funsplit una presentación positiva de los tipos ? ¿También tenemos algo similar en el cálculo secuencial (no dependiente)? ¿Cómo se vería?
¿Qué tan común / curioso es eso para los teóricos de la prueba en el campo?
fuente
Aquí hay una perspectiva ligeramente diferente de la respuesta de Fredrik. En general, las codificaciones de tipos de la Iglesia no son satisfactorias satisfarán las leyes pertinentes , pero no satisfarán las leyes .ηβ η
Esto significa que podemos definir un par dependiente de la siguiente manera:
π 1 π 1 : ∃ x
Sin embargo, la segunda proyección es realizable , y en un modelo paramétrico puede mostrar que también tiene el comportamiento correcto. (Vea mi borrador reciente con Derek Dreyer sobre parametricidad en el Cálculo de construcciones para obtener más información sobre esto). Así que creo que la proyección exige fundamentalmente algunas propiedades de extensionalidad para que tenga sentido.π2
En términos del cálculo posterior, el eliminador débil tiene una regla que se parece un poco a:
fuente
Richard Garner ha escrito un buen artículo sobre aplicación frente a funsplit, Sobre la solidez de los productos dependientes en la teoría de tipos de Martin-Löf (APAL 160 (2009)), que también analiza la naturaleza de orden superior de la regla de funsplit (con referencia a La extensión natural de la deducción natural de Peter Schroeder-Heister (JSL 49 (1984))).
Richard muestra que en presencia de tipos de identidad (y reglas de formación e introducción para los tipos ), funsplit es interderivable con la regla de aplicación anterior + eta proposicional, es decir, las dos reglas siguientes:Π
Es decir, si tiene funsplit, puede definir la aplicación y como se indica arriba para que se . Lo que es más interesante, si tiene aplicación y las reglas eta proposicionales, puede definir funsplit.( Π -Prop- η -Comp )η (Π-Prop-η-Comp)
Además, funsplit es estrictamente más fuerte que la aplicación: las reglas de eta proposicionales no son definibles en una teoría con solo aplicación; por lo tanto, funsplit no es definible, ya que entonces las reglas de eta proposicionales también lo serían. Intuitivamente, esto se debe a que las reglas de aplicación le dan un poco más de holgura: a diferencia de funsplit (y eta), no le dicen qué funciones son, solo que se pueden aplicar a los argumentos. Creo que el argumento de Richard podría repetirse también para los tipos , para mostrar el mismo resultado para vs proyecciones.s p l i tΣ split
Tenga en cuenta que si tuviera reglas eta definitorias, ciertamente también las tendría proposicionalmente (con ). Por lo tanto, creo que sus afirmaciones "[...] que nos dan para funciones" y "[...] esta última presentación hace que sea fácil obtener para pares" están equivocadas. Sin embargo, Agda implementa tanto para funciones como para pares (si se define como un registro), pero esto no se sigue solo de la aplicación.η η η Ση(m):=refl(m) η η η Σ
fuente