Muy bien, le diré algo: en general, para un sistema de tipo dado , lo siguiente es cierto:T
Si todos los términos de tipo de pozo en el cálculo están normalizando, entonces T es consistente cuando se ve como una lógica.TT
La prueba generalmente procede asumiendo que tiene un término de tipo F a l s e , utilizando la reducción de sujeto para obtener una forma normal, y luego procediendo por inducción en la estructura de dicho término para obtener una contradicción.a b s u r dF a l s e
Es natural preguntarse si lo contrario es válido, es decir
Para cualquier sistema de tipo , si T es lógicamente consistente , entonces cada término bien tipado en T se está normalizando.TTT
El problema con esto es que no existe una noción real más general de "sistema de tipos", y aún menos acuerdo sobre el significado de consistencia lógica para tales sistemas. Sin embargo, podemos verificar empíricamente que
Para los sistemas de tipos más conocidos que tienen una interpretación lógica, lo contrario es válido.
¿Cómo se relaciona esto con la integridad de Turing? Bueno, por un lado, si la verificación de tipo es decidible , entonces el argumento de Andrej muestra que uno de los siguientes debe ser válido:
- El conjunto de todos los programas bien escritos no es Turing Complete.
- Hay un programa bien escrito que no termina.
Esto tiende a sugerir que:
Los sistemas de tipos que tienen una interpretación lógica y son consistentes y recursivamente enumerables no son Turing Complete.
Dar un teorema real en lugar de una sugerencia requiere hacer que la noción de sistemas de tipos e interpretaciones lógicas sea matemáticamente precisa.
Ahora me vienen a la mente dos comentarios:
Hay un sistema de tipos indecidible , el sistema de tipos de intersección que tiene una interpretación lógica y puede representar cada término normalizador . Como observa, esto no es lo mismo que ser Turing completo, ya que el tipo de una función total puede necesitar actualizarse (refinarse, de hecho) antes de aplicarlo al argumento deseado. El cálculo es un cálculo de "estilo curry" y es igual a STLC +
Γ ⊢ M : τλ
y
Γ⊢M:τ∩σ
Γ ⊢ M: τΓ ⊢ M: σΓ ⊢ M: τ∩ σ
Está claro que la "interpretación"∩=∧conduce a una interpretación lógica consistente.Γ ⊢ M: τ∩ σΓ ⊢ M: τΓ ⊢ M: τ∩ σΓ ⊢ M: σ
∩ = ∧
Hay una clase de sistemas de tipos, los Sistemas de Tipos Puros , en los que tal pregunta podría hacerse precisa. En este marco, sin embargo, la interpretación lógica es menos clara. Uno podría estar tentado a decir: "un PTS es consistente si tiene un tipo deshabitado". Pero esto no funciona, ya que los tipos pueden vivir en diferentes "universos", donde algunos pueden ser consistentes y otros no.
Coquand y Herbelin definen una noción de sistemas lógicos de tipo puro , en la que la pregunta tiene sentido y muestran
Cada LPTS inconsistente y no dependiente tiene un combinador de bucles (y también lo está Turing Complete)
Lo que responde a la pregunta en una dirección (inconsistente TC) en este caso. Hasta donde sé, la pregunta para LPTS general todavía está abierta y es bastante difícil.⇒
Editar: ¡ Lo contrario del resultado Coquand-Herbelin no es tan fácil como pensaba! Esto es lo que se me ocurrió hasta ahora.
Un sistema lógico de tipo puro es un PTS con (al menos) los tipos y T y p e , (al menos) el axioma P r o p : T y p e y (al menos) la regla ( P r o p , P r o p , P r o p ) , con el requisito adicional de que no hay ningún tipo de tipo P r o p .P r o pT y p eP r o p : T y p e( P r o p , P r o p , P r o p )P r o p
Ahora voy a asumir una declaración particular de integridad de Turing: arreglar un LPTS y dejar que Γ sea el contextoLΓ
Γ = n a t : P r o p , 0 : n a t , S : n a t → n a t
esTuring Completoiff para cada función computable total f : N → N hay un término t f tal que
Γ ⊢ t f : n a t → n a t
y para cada n ∈ N t f ( S n 0 ) → ∗ β S f ( n ) 0LF: N → NtF
Γ ⊢ tF: n a t → n a t
n ∈ N
tF ( Snorte 0 ) →∗βSF( n ) 0 0
Ahora, el argumento de diagonalización de Andrej muestra que hay no terminantes de tipo n a t .tn a t
¡Ahora parece que estamos a medio camino! Dado un término que no termina , queremos reemplazar las ocurrencias de n a t por algún tipo genérico A y deshacernos de 0 y S en Γ , y tendremos nuestra inconsistencia ( A está habitada en el contexto A : P r o p )!Γ ⊢ l o o p : n a tn a tUN0 0SΓUNA : P r o p
Desafortunadamente, aquí es donde me quedo atascado, ya que es fácil reemplazar por la identidad, pero el 0 es mucho más difícil de eliminar. Idealmente, nos gustaría usar algún teorema de recursión de Kleene, pero aún no lo he descubierto.S0 0