TPPSF Programando pruebas - 1
4. Programando PruebasIsomorfismo de Curry-Howard
TPPSF Programando pruebas - 2
Construcción de Pruebas en Coq
• ¿Qué estamos haciendo cuando probamos un teorema en Coq?
Construimos un objeto que es la prueba del teorema
• ¿En qué lenguaje está escrita esa prueba? En Cálculo Lambda!!!! Cada enunciado lógico se corresponde
con un tipo y su prueba es un objeto de ese tipo.
TPPSF Programando pruebas - 3
Isomorfismo de Curry-Howard
• Identificación de proposiciones con tipos P : Prop pensamos a P como el tipo cuyos
objetos son las pruebas de P
• Identificación de pruebas con objetos a: P significa que a es una prueba (objeto)
de P
TPPSF Programando pruebas - 4
Cálculo Proposicional MinimalDeducción Natural
• Proposiciones atómicas y de la forma • Juicios de la forma: |- “ se deduce a partir del conjunto de hipótesis ”=[n]
|-
ass|- |-
I|-
|- |-
E
Reglas:
TPPSF Programando pruebas - 5
Deducción Natural en Coq
[n] |- lo vemos escrito H1:
Hn:n
|-
asscorresponde a Assumption
|- |-
I corresponde a Intro
|- |- |-
E corresponde a Apply o Cut (dependiendo de si está o no en
TPPSF Programando pruebas - 6
Cálculo simplemente tipadosistema de tipos
Juicios de la forma: |- e: “la expresión e tiene tipo bajo el contexto ”
=[x1:xn:n]
x: |- x:
|- x.e:x: |- e:
|- (e1 e2): |- e1: |- e2:
ctx
abs app
Reglas:
TPPSF Programando pruebas - 7
comparemos...
Deducción Natural
|-
|- |-
|- |- |-
Cálculo
x: |- x:
|- x.e:x: |- e:
|- (e1 e2): |- e1: |- e2:
ass
I
E
ctx
abs
app
TPPSF Programando pruebas - 8
Más similaridades: Reducciones
|- |-
|-
|-
I
E
|- a: |- x.e:x: |- e:
|- (x.e a):
abs
app
Deducción Natural
Cálculo
|- a: x: |- e:
|- (x.e a)=e[a/x] :
|- |-
|- cut
cut
TPPSF Programando pruebas - 9
Isomorfismo de Curry-Howard
Un poco de historia:• En 1958 H. B. Curry observó que los axiomas del
cálculo proposicional y se correspondían con los tipos de los combinadores S,K e I
• En 1965 W. Tait descubrió una correspondencia entre la eliminación de lemas en pruebas (cut-elimination) y la -reducción en el cálculo
• En 1969 W. A. Howard desarrolla una noción de construcción adecuada para representar las pruebas de la lógica intuicionista.
TPPSF Programando pruebas - 10
Cálculo de Predicados MinimalDeducción Natural
• Proposiciones atómicas y de la forma xA• Juicios de la forma: |-
“ se deduce a partir del conjunto de hipótesis y objetos ”=[x1AxmAm] [n]
|- xAxA |-
I|- (a)
|- xA |- aA E
Reglas: ass, I,E más:
TPPSF Programando pruebas - 11
En Coq...
[x1: Axm:Am] [n] |- lo vemos escrito
x1:A1
xm:Am
H1:
Hn:n
corresponde a Intro x
|- xAxA |-
I
corresponde a Apply|- (a)
|- xA |- aA E
TPPSF Programando pruebas - 12
Cálculo con tipos dependientessistema de tipos
• Juicios de la forma: |- e: “la expresión e tiene tipo bajo el contexto ”=[x1:xn:n]
|- x.e:x:
x: |- e: |- (e a): [a/x]
|- e: x:|- a:
abs app
Reglas: ctx más:
TPPSF Programando pruebas - 13
comparemos otra vez...
Deducción Natural Cálculo
|- xxA |-
|- (a)
|- xA |- aA
I
E
|- x.e:x:
x: |- e:
|- (e a): [a/x]
|- e: x:|- a:
abs
app
TPPSF Programando pruebas - 14
Observaciones sobre los productos
La regla del producto nos sirve para representar tres tipos de funciones
|- x:: Set
|- :Set x: |- :Set prod
|- x:: Prop
|- :Set x: |- :Prop prod
|- x:: Prop
|- :Prop x: |- :Prop prod
[x:nat]x: (x:nat)nat (= natnat)
[n:nat](diag n): (n:nat)(Mat n n)
[x:nat](leS x): (x:nat) (Le x(Sx))
Ax: (x:nat) (x=0) ~(y.x=Sy)
[H:z=0](Ax z H): (H:z=0)
~(y.z=Sy) (z=0) ~(y.z=Sy)
TPPSF Programando pruebas - 15
Isomorfismo en Coq
Cuando constuimos una prueba de un enunciado en Coq, estamos construyendo un término del tipo correspondiente al enunciado.
La situación general es de la forma:
Tácticas: constructoras de términos
1
?1:
n
?n: n
TPPSF Programando pruebas - 16
Construcción de pruebas en Coq
Assumption: corresponde a la prueba H: H: ?:
?:
Intro H: corresponde a la prueba [H:] ?1
donde ?1 será la prueba de corresp. a:
H: ?1:
Apply H: corresponde a la prueba (H ?1)
donde ?1 será la prueba de corresp. a:
H: ?:
H:?1:
TPPSF Programando pruebas - 17
Construcción de pruebas en Coq (cont.)
Cut : corresponde a la prueba (?1 ?2)
donde ?1 y ?2 serán las pruebas de y correspondientes a:
?:
?1: y
?2:
?: (x:)
Intro x: corresponde a la prueba [x:] ?1
donde ?1 será la prueba de corresp. a:
x:
?1:
ver que es exactamente la misma explicación que para el caso
TPPSF Programando pruebas - 18
Construcción de pruebas en Coq (cont.)
Ejemplo:
H:(x:nat)(y:(P x))(Q x y)
?: (Q 0 a)
Apply H (H 0 a): (Q 0 a)
0:nat
a:(P 0)
Apply H: corresponde a la prueba
(H x1 x2)
donde es la sustitución que unifica a con . x1 :1 y x2:2 deberán ser consecuencias de
H :(x1:1)(x2:2) ?:
x2:2
x1:1
yCoq chequea:
TPPSF Programando pruebas - 19
Programando Pruebas
• Los resultados ya probados y las hipótesis pueden pensarse como objetos de ciertos tipos (en general, son funciones)– H1: AB– Lema2: A
• Estas funciones pueden aplicarse a argumentos, que a su vez pueden ser pruebas de resultados o a otras hipótesis
• De esta forma, podemos utilizar las pruebas como objetos de un lenguaje funcional– (H1 Lema2): B
TPPSF Programando pruebas - 20
Programando PruebasEjemplos
H1: ABH2: A
B
Exact (H1 H2) Probado!!
H1: ABCH2: AH3: B
C
Exact ((H1 H2) H3) Probado!!
H1: A H2: ABH3: BC
C
Exact (H3 (H2 H1)) Probado!!
TPPSF Programando pruebas - 21
Programando PruebasEjemplos (cont.)
H1: (x:A)Ba: A
B
Apply (H1 a) Probado!!
H1: A(x:B)CH2: Az: B
C
Exact ((H1 H2) z) Probado!!
H1: (x:A) BCH2: Bz: A
C
Exact ((H1 z) H2) Probado!!
TPPSF Programando pruebas - 22
Tácticas para ver pruebas
Show Proof: muestra el término correspondiente a la prueba que se está armando
Show Tree: muestra la prueba como en el sistema de Deducción Natural
Print Natural: muestra la prueba hecha en el sistema de Deducción Natural en “lenguaje natural” (se necesita cargar el archivo Natural.vo)