La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

TPPSFAsistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones.

Presentaciones similares


Presentación del tema: "TPPSFAsistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones."— Transcripción de la presentación:

1

2 TPPSFAsistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones

3 TPPSFAsistentes para programadores - 2 1. Cálculo simplemente tipado Sintaxis Términos e ::= x | x.e | (e 1 e 2 ) | c x  Var c  Const Tipos  ::= t |  1  2 t  TConst Contextos  ::= [ ] | ,x:  (o directamente  ::= x 1 :  1... x n :  n (n  0) )

4 TPPSFAsistentes para programadores - 3 Sistema de tipos Juicios de la forma:  |- e:  “la expresión e tiene tipo  bajo el contexto  ”  x:  |- x:   |- x.e:   x:  |- e:   |- (e 1 e 2 ):   |- e 1 :   |- e 2 :  ctx abs app Reglas:

5 TPPSFAsistentes para programadores - 4 Ejemplos de términos tipados x.x: ? x. y. x: ? x. y. z.((x y) z): ? x. y. z.((x z) (z y)): ? ? :  (  ) ? : (  (  ))  (  (  ))

6 TPPSFAsistentes para programadores - 5 Reducciones Reducción  (( x.e 1 ) e 2 )   e 1 [x  e 2 ]  -redex Reducción  x.(f x)   f  -redex Reducción  Si c:= d entonces c   d  -redex (unfold)

7 TPPSFAsistentes para programadores - 6 Ejemplos de reducciones ((( x. y.(x y)) ( z.z)) w) ((( x. y.(x y)) ( z.z)) w)   (( y.(( z.z) y) w) (( y.(( z.z) y) w)   (( z.z) w) (( z.z) w)   w (( x.(( z.z) x)) y) (( x.(( z.z) x)) y)   (( z.z) y) (( z.z) y)   y

8 TPPSFAsistentes para programadores - 7 Reducciones infinitas No siempre una cadena de reducciones  y  tiene fin. Ejemplos: –Definimos  = x.(x x) Entonces (   )   (   )   (   )  ...... –Definimos  3 = x.(x x x) Entonces (  3  3 )   (  3  3  3 )  ...... Propiedad importante: tener tipo garantiza que no haya computaciones infinitas Dado un término e, si existe  tal que  |- e: , entonces e es  -  -normalizable (toda cadena de reducciones temina en una forma normal)

9 TPPSFAsistentes para programadores - 8 Cálculo simplemente tipado en Coq Constantes de tipo: nat, bool, etc. El tipo de las variables aparece en las abstracciones: –[x: nat] x : nat  nat –[x:bool] x : bool  bool –[f:nat  bool][x:nat] (f x) : bool –[g:nat  nat  bool][n:nat] ((g n) n) : bool

10 TPPSFAsistentes para programadores - 9 2. Polimorfismo Paramétrico En los lenguajes funcionales (ML, Haskell, Gopher) escribimos: x. x :   Variable de tipo!! (X:Set) En Coq, abstraemos el tipo. Los tipos de datos pertenecen a la clase Set: [X:Set][x:X] x : X  X Abstrayendo en la clase Set obtenemos polimorfismo paramétrico

11 TPPSFAsistentes para programadores - 10 3. Tipos dependientes Polimorfismo paramétrico = abstraer variables de tipo (de Set). En general: podemos abstraer variables de cualquier tipo. Tipos dependientes: un tipo puede depender no solo de otro tipo, sino también de un objeto de cierto tipo.

12 TPPSFAsistentes para programadores - 11 Ejemplos Array: Set  nat  Set –Array bool 3 –zip: (A:Set)(k:nat)(Array A k)  (Array A k)  (Array A K) Matrix: Set  nat  nat  Set –Matrix nat 5 4 –prod:(n,m,k:nat) (Matrix nat n k)  (Matrix nat k m)  (Matrix nat n m)

13 TPPSFAsistentes para programadores - 12 Lenguaje de programación de Coq Es un lambda cálculo tipado con las siguientes características: –es de orden superior –permite definir funciones paramétricas –tiene tipos dependientes –permite definir tipos inductivos –permite definir tipos coinductivos Cálculo de Construcciones (CC) Cálculo de Construcciones Inductivas = CC + tipos inductivos (CCI) Cálculo de Construcciones Inductivas y Coinductivos = CCI+tipos coinductivos (CCI  ) CC CCI CCI 

14 TPPSFAsistentes para programadores - 13 4. Cálculo de Construcciones Sintaxis 1. Términos T ::= Set | Prop | Type | xvariables | ( T T )aplicación | [ x : T ]Tabstracción | ( x : T) Tproducto | T  Ttipo de las funciones* * A  B abrevia (x:A)B cuando x no ocurre libre en B Ejemplos: [A:Set][x:A]x [f: A  A  A][a:A](f a a)

15 TPPSFAsistentes para programadores - 14 Sintaxis (cont.) 2. Contextos   ::=  |  x:T 3. Definiciones def ::= C:= T

16 TPPSFAsistentes para programadores - 15 Alcance La lambda abstracción y el producto son operadores que ligan (son cuantificadores) Definición [alcance] - en el término [x:A]B el alcance de la abstracción [x:A] es B. - en el tipo (x:A) B el alcance del cuantificador (x:A) es B. Las nociones de variable libre y ligada son las usuales.

17 TPPSFAsistentes para programadores - 16 Sustitución Definición [sustitución] sean t y u dos términos y x una variable. t[x  u] denota el término que resulta de sustituir todas las ocurrencias libres de x en t por el término u. Otras notaciones: t[u/x], [u/x]t, t[x:=u], t{x:=u} Asumiremos que la operación de sustitución evita la captura de variables renombrando adecuadamente las variables ligadas.

18 TPPSFAsistentes para programadores - 17 Reglas de Reducción Definición [reducción beta y eta] ([x:T]f a)   f [x  a] [x:T] (f x)   f Definición Se define como   y   las relaciones correspondientes a la reescritura de un subtérmino utilizando   y  .. Se define   como la unión de ambas relaciones. Se define como   * y   * la clausura reflexiva, transitiva de   y   respectivamente. Idem para   *

19 TPPSFAsistentes para programadores - 18 Reglas Reducción (cont.) Definición [beta y eta conversión] Se definen   como la clausura reflexiva, transitiva y simétrica de   * Si t   u se dice que t y u son  -convertibles Definición [redex, forma normal] Un término t es un  -redex si t   u y es un  - redex si t   u Un término t está en  -forma normal si ninguno de sus terminos es un  -redex (idem para  -forma normal y  -forma normal).

20 TPPSFAsistentes para programadores - 19 Juicio de tipabilidad en CC Definición [juicio de tipado] Los juicios t tiene tipo T en el contexto  (  |- t:T ) y  es un contexto bien formado se definen en forma mutuamente recursiva El conjunto S de clases de objetos se define como : S = {Set, Prop, Type, Type1, Type2,...} El conjunto R de reglas de formación de productos es: R = {,,,,,,,, | i  N }

21 TPPSFAsistentes para programadores - 20 Juicio de Tipabilidad (cont) Reglas de Buena formación de Contextos [ ] bien formado  x:T bien formado DECLARACION DE VARIABLES x   T:s

22 TPPSFAsistentes para programadores - 21 Juicio de Tipabilidad (cont) Reglas de Tipado  Set:Type AX1  (x:T)U : s 3  R ( PROD) , x:T  U:s 2  Prop:Type AX2  T:s 1  Tipe i :Type i+1 AXi

23 TPPSFAsistentes para programadores - 22 Juicio de Tipabilidad (cont) Reglas de Tipado  x : t  bien formado x:t  VAR  x:T]t : (x:T)U  (x:T)U:s ABSTR , x:T  t:U  (f t) : U [x  t]  f:(x:T)U APP  t:T

24 TPPSFAsistentes para programadores - 23 Juicio de Tipabilidad (cont) Reglas de Tipado  t: U (CONV)  U:s  t:TT   U Ejercicio: sabiendo que A  B puede definirse como una abreviación sintáctica del producto (x:A)B en donde x no ocurre en B. Derivar a partir de la regla para el producto, la regla de tipado de la A  B.

25 TPPSFAsistentes para programadores - 24  -Reducción Definición [regla delta] si C :=E es una definición incorporada al contexto  t   t´ donde t´ es el resultado remplazar una ocurrencia del símbolo de constante C por E en t. Observar que este remplazo no es una sustitución pues C es un símbolo de constante. Las definiciones de forma normal y conversion vistas para  se definen de forma análoga para  Presentación de CC con  en Capitulo 4 del manual y [Paulin-Mohring 96]

26 TPPSFAsistentes para programadores - 25 Coq: Tácticas vinculadas a la reducción Estrategias de reducción –Cbv flag1 flag2 –Lazy flag1 flag2 donde flagi es el nombre de la reducción (  o  ) Reducción Delta –Unfold id1... Idn –Fold term Estrategias de reducción –Compute calcula la forma normal –Simpl aplica  y luego  a constantes transparentes

27 TPPSFAsistentes para programadores - 26 Propiedades del Cálculo de Construcciones Normalización Si el juicio  A:B es derivable entonces A tiene forma normal. Confluencia Si  A:B y A   * A 1 y A   * A 2 entonces existe C tal que A 1   * C y A 2   * C.

28 TPPSFAsistentes para programadores - 27 Más Propiedades del Cálculo de Construcciones Decidibilidad del tipado Existe un algoritmo que dado un término U y un contexto  : devuelve un término V tal que  U:V sea derivable reporta un error si no existe un término V tal que  U:V.

29 TPPSFAsistentes para programadores - 28 Problemas ligados al tipado 1. Chequeo de tipos:  U:V ? 2. Inferencia de tipos: Dados  y  U existe V tal que  U:V ? 3. Vacuidad de un tipo: Dados  y  V existe U tal que  U:V ? Los problemas 1 y 2 son decidibles en el cálculo de construcciones, 3 no lo es.


Descargar ppt "TPPSFAsistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones."

Presentaciones similares


Anuncios Google