¿Cuál es la teoría de tipo dependiente más intuitiva que podría aprender?

46

Estoy interesado en obtener una comprensión realmente sólida de la escritura dependiente. He leído la mayor parte de TaPL y he leído (si no está completamente absorbido) 'Tipos dependientes' en ATTaPL . También he leído y hojeado un montón de artículos sobre mecanografía dependiente.

Muchas discusiones de teoría de tipos parecen centrarse en agregar características incrementales a los sistemas de tipos anteriores, no "¿cuál es la próxima gran generalización del sistema de tipos X?". Los tipos dependientes parecen ser la próxima gran generalización del Sistema F, pero aún no he encontrado el lenguaje intuitivo, canónico y de tipo dependiente. Las muchas referencias al cálculo de construcciones (inductivas) me hacen pensar que CoC es ese lenguaje, pero las explicaciones del lenguaje que he visto no me parecen muy claras o intuitivas.

Estoy esperando / adivinando que dicho lenguaje tendría características como: (y por favor avíseme si algo en particular resulta confuso o poco realista)

  • Abstracción generalizada (puede tener funciones de cualquier dominio en la jerarquía de tipos a otra, tipo -> término, término-> tipo '' 'etc.)
  • Tiene una jerarquía infinita de escritura (términos: tipos: tipos ': tipos' ': ...)
  • Un número mínimo de elementos básicos. Me imagino que el lenguaje solo afirma un elemento único para cada nivel. Por ejemplo, podría afirmar que ((): Unidad: Tipo: Tipo ': ...). Otros elementos se construyen a partir de estos elementos.
  • Los tipos de suma y producto son derivables.

También estoy buscando una explicación de ese lenguaje que idealmente discutiría:

  • La relación entre abstracción y cuantificación en ese lenguaje. Si no están unificados, explique por qué no están unificados.
  • La jerarquía de tipos infinitos explícitamente

Estoy haciendo esta pregunta porque quiero aprender la teoría del tipo dependiente, pero también porque quiero elaborar una guía que, suponiendo un poco de experiencia en CS, enseñe el uso y la comprensión de los asistentes de prueba y los idiomas mecanografiados de forma dependiente.

(Cruz publicado en Reddit)

John Salvatier
fuente

Respuestas:

35

Hay algunas formas diferentes de abordar esto:

  1. Teoría del tipo dependiente . Probablemente esta no sea la forma más fácil de aprender sobre los tipos dependientes, pero podría consultar los documentos de Cálculo de construcciones y sus variantes, Pure Type Systems y el artículo de Martin Hofmann sobre la sintaxis y la semántica de los tipos dependientes, por ejemplo.

  2. Prueba de teorema . En primer lugar, eche un vistazo a mi respuesta a una pregunta relacionada: ¿Cómo haría para aprender la teoría subyacente del asistente de prueba Coq? .

  3. Programación con tipos dependientes . Mirar los idiomas recientes con tipos dependientes como Epigram o Agda o los menos recientes como ML dependiente y escribir algunos programas ayudará a solidificar las ideas. Epigram, por ejemplo, tiene un diseño extremadamente limpio. Otro ángulo es ver cómo se implementan los tipos dependientes . Una teoría práctica del tipo dependiente es : Tipos dependientes sin el azúcar. Varias tesis doctorales están dedicadas a la programación con teoría del tipo dependiente: Dan Licata , Nils Anders Danielsson , Ulf Norrel , Susmit SarkarΠΣ, entre otros. Y, por supuesto, está el libro de Adam Chlipala, dado en la respuesta de Marc Hamann.

Me inclinaría a comenzar con la programación, antes de utilizar la prueba de teoremas, y luego comenzar a explorar los problemas más teóricos.

Dave Clarke
fuente
Puedo encontrar documentos para Epigram, pero no puedo encontrar una descarga real para Epigram, solo el Epigram 2. aún sin terminar. ¿Alguna idea?
John Salvatier
1
¿Encontraste: e-pig.org/darcs/Pig09/web ? Epigram está disponible en la parte inferior de la página.
Dave Clarke
3
Epigram 1 está esencialmente sin mantenimiento desde hace bastante tiempo AFAIK: el autor usa Agda en estos días (mientras trabaja en Epigram 2 a un lado).
Blaisorblade
En 2019, no creo que Epigram 2 vaya a suceder, pero ahora hay Idris (¡e Idris 2!).
xrq
14

El cálculo que es esencialmente el núcleo de LF, a su vez, el enfoque más ampliamente reimplementado de la lógica de orden superior, es, con mucho, el sistema de tipo dependiente más simple que puede aprender, ya que consiste solo en la extensión del tipo sistema del cálculo lambda simplemente tipado con cuantificadores dependientemente tipados. Por lo tanto, las intuiciones clave necesarias para dominar LF son intuiciones que debe dominar con cualquier teoría con tipos dependientes.λπ

Twelf es un buen sistema de prueba de teoremas basado en LF. Revisando las notas avanzadas del curso ofrecidas por Frank Pfenning hay una buena introducción a la teoría y práctica de LF.

Dicho esto, tal vez no sea el mejor primer sistema para aprender si su interés está en las matemáticas constructivas en lugar de lo esencial de la teoría de tipos: LF significa marco lógico y es un sistema utilizado para axiomatizar teorías, y no se trabaja tan a menudo como Un sistema de destino directamente. El uso de un sistema basado en la teoría de tipos de Martin-Loef es probablemente la mejor introducción -Dave menciona que Agda, entre otros- es quizás un mejor punto de partida si este es su objetivo, ya que puede comenzar con los tipos aritméticos e inductivos más rápidamente en tal caso. marco de referencia.

Charles Stewart
fuente
10

CoC es muy probablemente el camino a seguir. Simplemente sumérgete en Coq y trabaja en un buen tutorial como Software Foundations (en el que está involucrado Pierce de TaPL y ATTaPL).

Una vez que tenga una idea de los aspectos prácticos del tipeo dependiente, vuelva a las fuentes teóricas: entonces tendrán mucho más sentido.

Su lista de características parece básicamente correcta, pero ver cómo se desarrollan en la práctica vale más que mil puntos de características.

(Otro tutorial un poco más avanzado es la programación certificada de Adam Chlipala con tipos dependientes )

Marc Hamann
fuente
"intuitivo" es quizás el punto de conflicto aquí: hay muchas más intuiciones volando en CoC / CIC que simplemente escribir dependiente. Es un buen objetivo final, en mi opinión, la elección es realmente entre Coq y Twelf, pero quizás no sea el mejor primer paso para "obtener una comprensión realmente sólida de la escritura dependiente".
Charles Stewart
@ Charles: Su punto está tomado. Todavía pienso desde un punto de vista práctico que es una buena apuesta. A pesar de que una comprensión completa de CoC / CIC podría ser una tarea más compleja, Coq (más la existencia de buenos tutoriales de nivel básico para ello) hace que sea fácil concentrarse en aprender solo los aspectos de programación o solo los aspectos básicos del asistente de pruebas (como sus intereses lo dictan) incluso antes de que haya comprendido todas las complejidades. Creo que esto califica como "intuitivo" para alguien que no tiene antecedentes teóricos.
Marc Hamann el