Document
Transcripción
Document
Introducción Evaluador para PCF Equivalencia de programas PCF(2/2) Eduardo Bonelli Departamento de Computación FCEyN UBA 13 de septiembre de 2005 Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Programas No todos los pseudo términos pueden ser ejecutados o evaluados por sı́ mismos Distinguimos a un subconjunto de los términos (pseudo términos tipables) que llamamos programas Las dos caracterı́sticas principales que deben tener los programas son: 1 2 No deben hacer referencia a una variable no declarada o no ligada Deben tener un tipo (o forma) apropiado de tal modo de poder arrojar un valor imprimible o efecto observable Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Programas Un término se dice cerrado si no tiene variables libres Los números y booleanos pueden ser impresos (ie. son observables) Consideramos, entonces, a cualquier término cerrado de tipo nat o bool como un programa Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Programas Un término se dice cerrado si no tiene variables libres Los números y booleanos pueden ser impresos (ie. son observables) Consideramos, entonces, a cualquier término cerrado de tipo nat o bool como un programa ¿Qué sucede con los términos de tipo producto? Se podrı́an incluir como tipos observables (si el tipo de sus componentes también lo son) Pero no son estrictamente necesarios por lo que optamos por excluirlos para simplificar la presentación Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Programas Un término se dice cerrado si no tiene variables libres Los números y booleanos pueden ser impresos (ie. son observables) Consideramos, entonces, a cualquier término cerrado de tipo nat o bool como un programa ¿Qué sucede con los términos que tipo funcional? ¿Podemos observar una abstracción para poder compararla por igualdad con otro? NO. Pues no tenemos manera efectiva de comparar por igualdad las funciones representadas por esos términos. Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Programas Definición Un tipo es observable si es nat o bool. Un programa PCF es un término cerrado de un tipo observable. Un resultado PCF es un valor observable, es decir, un número natural o true o false. Eq? 2 3 es un programa λx : nat.x no es un programa, pero (λx : nat.x)2 sı́ lo es h2, 3i no es un programa 2 + x no es un programa Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Semántica operacional Nuestro objetivo es darle semántica (axiomática, operacional, denotacional, etc.) a programas PCF. Semántica operacional “small step” Consiste en definir una relación de reducción “→” que permite reducir un programa, paso por paso Semántica operacional “big step” Consiste en definir una relación “⇓” que permite reducir un programa a su resultado final. Puede definirse directamente (“Natural Semantics”) o a través de la small step. Veremos un ejemplo de ésta última cuando definamos un evaluador para PCF. Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Semántica operacional small step Un juicio de reducción es una expresión de la forma: ΓBM → N :σ que se lee: “el pseudo término M de tipo σ bajo contexto Γ reduce en un paso a N, también de tipo σ bajo contexto Γ” Para simplificar la presentación, en lugar de juicios de reducción, definiremos juicios simplificados de la forma M → N que se leen: “el pseudo término M reduce, en un paso, al pseudo término N” Luego se prueba que si Γ B M : σ y M → N, entonces Γ B N : σ (este resultado se conoce como Subject Reduction) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Estrategia call-by-name para PCF Hay muchas maneras de definir una relación de reducción, es decir, de definir el juicio M → N Nosotros definiremos uno que lleva el nombre de Call-By-Name por lo que escribiremos M →CBN N Este nombre proviene de la manera en que se pasan los argumentos a una función, en una aplicación Para definir el juicio M →CBN N vamos a introducir axiomas de reducción y reglas de reducción Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Axiomas de reducción (1/2) n+m =p (SO-Suma) n + m →CBN p n 6= m (SO-Eq1) Eq? n n →CBN true (SO-Eq2) Eq? n m →CBN false (SO-If-1) if true then M else N →CBN M (SO-If-2) if false then M else N →CBN N Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Axiomas de reducción (2/2) (SO-Proj-1) π1 ((M, N)) →CBN M (SO-Proj-2) π2 ((M, N)) →CBN N (SO-β) (λx : σ.M) N →CBN M{x ← N} (SO-fix) fix σ →CBN λf : σ → σ.f (fix σ f ) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Reglas de reducción (1/3) M →CBN M 0 M + N →CBN M 0 + N M →CBN M 0 n + M →CBN n + M 0 Eduardo Bonelli (SO-Cong-+.1) (SO-Cong-+.2) PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Reglas de reducción (2/3) M →CBN M 0 Eq? M N →CBN Eq? M 0 N M →CBN M 0 Eq? n M →CBN Eq? n M 0 (SO-Cong-Eq.1) (SO-Cong-Eq.2) M →CBN M 0 if M then P else Q →CBN if M 0 then P else Q Eduardo Bonelli PCF(2/2) (SO-Cong-If) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Reglas de reducción (3/3) M →CBN M 0 π1 (M) →CBN π1 (M 0 ) M →CBN M 0 π2 (M) →CBN π2 (M 0 ) M →CBN M 0 M N →CBN M 0 N Eduardo Bonelli (SO-Cong-Proy.1) (SO-Cong-Proy.2) (SO-Cong-App) PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Ejemplos if Eq? 2 3 then 7else 8 →CBN 8 (λx : nat.x + 1) (if Eq? 2 3 then 7else 8) →CBN (if Eq? 2 3 then 7else 8) + 1 (λf : nat → nat.f 2) (λx : nat.x + 1) →CBN →CBN →CBN 3 (⊥nat =)fix nat (λy : nat.y + 1) →CBN →CBN →CBN ⊥nat + 1 (λx : nat.1) ⊥nat →CBN 1 Intuitivamente, M →CBN N busca aplicar los axiomas en el subtérmino que está más a la izquierda de M y que no se encuentre debajo de un “λ” o un “h , i” Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Forma normal Forma normal Decimos que un término M está en (call-by-name) forma normal si no existe N tal que M →CBN N. (λy : nat.y ) 3 no está en forma normal λx : nat.((λy : nat.y ) 3) está en forma normal 2 + 3 no está en forma normal h2 + 3, 3 + 4i está en forma normal Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Propiedades de la reducción CBN Determinismo de reducción CBN Si M →CBN P y M →CBN Q, entonces P = Q. Subject Reduction Si Γ B M : σ y M →CBN N, entonces Γ B N : σ. Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Programas Semántica operacional small step Axiomas y reglas de reducción para CBN Propiedades de la reducción CBN Propiedades de la reducción CBN Determinismo de reducción CBN Si M →CBN P y M →CBN Q, entonces P = Q. Subject Reduction Si Γ B M : σ y M →CBN N, entonces Γ B N : σ. Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Función de evaluación Ejemplos de evaluación CBN Propiedades de la evaluación CBN Evaluador para PCF La relación “→CBN ” nos permite simplificar un programa paso por paso Componiendo estos pasos podemos ejecutar un programa para obtener un resultado PCF Recordar que un resultado PCF es un valor observable, es decir, un número natural, el término true o el término false. De esta manera podemos definir una semántica operacional “big step” para PCF Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Función de evaluación Ejemplos de evaluación CBN Propiedades de la evaluación CBN Función de evaluación Función de evaluación CBN def Eval(M) = N si M CBN N y N está en forma normal. La relación M CBN N representa muchos pasos de reducción CBN y se define inductivamente del siguiente modo: M=N M CBN N M →CBN P P CBN N M CBN N Decimos que un pseudo término M tiene forma normal si existe una forma normal N tal que M CBN N. Eval es una función parcial. Eval(M) no está definida si M no tiene forma normal Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Función de evaluación Ejemplos de evaluación CBN Propiedades de la evaluación CBN Ejemplos de evaluación CBN Eval((if Eq? 2 3 then 7else 8) + 1) = 9 Eval(⊥nat ) no está definida (donde ⊥nat = fix nat (λy : nat.y + 1)) Eval((λx : nat.1) ⊥nat ) = 1 Eval((λx : nat.x + 1) (2 + 3)) = 6 Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Función de evaluación Ejemplos de evaluación CBN Propiedades de la evaluación CBN Propiedades de la evaluación CBN Formas normales cerradas Supongamos que Γ B M : σ y M es cerrado y en forma normal. 1 Si σ = nat, entonces M = n 2 Si σ = bool, entonces M = true o M = false 3 Si σ = ρ → τ , entonces existe N tq M = λx : ρ.N 4 Si σ = ρ × τ , entonces existe P, Q tq M = hP, Qi Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Función de evaluación Ejemplos de evaluación CBN Propiedades de la evaluación CBN Propiedades de la evaluación CBN Correctitud de evaluación CBN 1 Si BP : nat y P tiene forma normal, entonces Eval(P) = n para algún numeral n. 2 Si BP : bool y P tiene forma normal, entonces Eval(P) = b con b ∈ {true, false}. Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia de programas Cada forma de definir semántica de programas induce una noción de equivalencia sobre los mismos En semántica axiomática ecuacional: dos términos Γ B M : σ y Γ B N : σ se consideran equivalentes si Γ B M = N : σ puede derivarse en el sistema visto en clase ¿En semántica operacional? También se puede definir una noción de equivalencia de términos (y, en particular, de programas). Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia operacional de programas Equivalencia operacional de programas Dos programas P y Q son operacionalmente equivalentes si Eval(P) ' Eval(Q), donde ésto último significa que Eval(P) = Eval(Q) o bien la evaluación no está definida para ninguno de los dos. El problema con ésta definición es que sólo está definida para programas Para poder razonar sobre programas de manera modular o composicional precisamos una noción de equivalencia sobre términos arbitrarios (y no sólo programas) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia operacional de programas Equivalencia operacional de programas Dos programas P y Q son operacionalmente equivalentes si Eval(P) ' Eval(Q), donde ésto último significa que Eval(P) = Eval(Q) o bien la evaluación no está definida para ninguno de los dos. El problema con ésta definición es que sólo está definida para programas Para poder razonar sobre programas de manera modular o composicional precisamos una noción de equivalencia sobre términos arbitrarios (y no sólo programas) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia operacional de términos Contexto Un contexto es un término con un agujero (representado con el sı́mbolo “”). def Ej. C [ ] = λx : nat.x + Un contexto puede verse como un término “incompleto”. El agujero se puede rellenar con un término Ej. C [2 + y ] = λx : nat.x + (2 + y ) Ej. C [x] = λx : nat.x + x (Observar que la operación de “rellenado” puede ligar variables). Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia operacional de términos Equivalencia operacional Dos términos Γ B M : σ y Γ B N : σ son operacionalmente equivalentes si para todo contexto C [ ], tal que C [M] y C [N] son programas, se tiene Eval(C [M]) ' Eval(C [N]) En ese caso escribimos M =op N. En la literatura también se conoce como “equivalencia observacional” Fue introducida por J.-H. Morris. (“Lambda calculus models of programming languages” PhD thesis, M.I.T., 1968) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Equivalencia operacional de términos Equivalencia operacional Dos términos Γ B M : σ y Γ B N : σ son operacionalmente equivalentes si para todo contexto C [ ], tal que C [M] y C [N] son programas, se tiene Eval(C [M]) ' Eval(C [N]) En ese caso escribimos M =op N. La idea: “podés reemplazar M por N sin notar la diferencia” Los contextos representan el entorno de evaluación y funcionan a modo de “reactivos” Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Ejemplos Para probar que M 6=op N (ie. que no son operacionalmente equivalentes) basta con hallar un contexto C [ ] tal que C [M] y C [N] son programas y Eval(C [M]) 6' Eval(C [N]). En ese caso se habla de un “distinguishing context”, es decir, un contexto que permite distinguir a M de N. Ejemplo: Mostrar que 3 6=op 4 Tomamos C [ ] = Eq? 3. Notamos que C [3] y C [4] son programas (pues son términos cerrados de tipo bool) Eval(C [3]) = true 6= false = Eval(C [4]) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Ejemplos Ejemplo: Mostrar que λx : nat.x + 1 6=op λx : nat.x + 2 Tomamos C [ ] = 1. Notamos que C [λx : nat.x + 1] y C [λx : nat.x + 2] son programas (pues son términos cerrados de tipo nat) Eval(C [λx : nat.x + 1]) = 2 6= 3 = Eval(C [λx : nat.x + 2]) Ejemplo: Mostrar que x + 1 6=op x + 2 Tomamos C [ ] = (λx : nat.)1. Notamos que C [x + 1] y C [x + 2] son programas (pues son términos cerrados de tipo nat) Eval(C [x + 1]) = 2 6= 3 = Eval(C [x + 2]) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Ejemplos Mostrar que M =op N puede ser difı́cil El problema es que deben verificarse que para todos los posibles contextos C [ ], tal que C [M] y C [N] son programas, se tiene Eval(C [M]) ' Eval(C [N]) Inducción sobre C [ ] no funciona (prueben con 2 + 2 =op 4!) Eduardo Bonelli PCF(2/2) Introducción Evaluador para PCF Equivalencia de programas Equivalencia de programas Equivalencia operacional de programas Equivalencia operacional de términos Ejemplos Dos técnicas para mostrar que M =op N Semánticas (ver texto de Mitchell): usar el hecho de que =den ⊆=op (“Adequacy” de la semántica denotacional) probar que M =den N apelar a “Adequacy” y concluir que M =op N. Coinductivas (ver, por ej., “Operationally-Based Theories of Program Equivalence”, Andrew Pitts, Semantics of Logic and Computation, CUP, 1997): caracterizar =op usando conjunto coinductivos. usar coinducción para probar que M =op N. Nota: no estudiaremos estas técnicas en la materia, los/las interesados/as pueden consultar las citas bibliográficas mencionadas. Eduardo Bonelli PCF(2/2)