Top Banner
TPPSF Asistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones
27

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

Feb 02, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: TPPSFAsistentes para programadores - 1 3. Asistentes de Pruebas para Programadores Cálculo de Construcciones.

TPPSF Asistentes para programadores - 1

3. Asistentes de Pruebas

para Programadores

Cálculo de Construcciones

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

TPPSF Asistentes para programadores - 2

1. Cálculo simplemente tipadoSintaxis

Términos

e ::= x | x.e | (e1 e2) | c x Var

c Const

Tipos

::= t | 12 t TConst

Contextos

::= [ ] | ,x: (o directamente ::= x1:1... xn:n (n 0) )

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

TPPSF Asistentes 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:

|- (e1 e2): |- e1: |- e2:

ctx

abs app

Reglas:

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

TPPSF Asistentes 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)): ?

• ? : ()

• ? : (())(())

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

TPPSF Asistentes para programadores - 5

Reducciones

• Reducción

((x.e1) e2) e1[xe2] -redex

• Reducción

x.(f x) f -redex

• Reducción

Si c:= d entonces c d -redex(unfold)

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

TPPSF Asistentes 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

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

TPPSF Asistentes 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)

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

TPPSF Asistentes 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:natbool][x:nat] (f x) : bool– [g:natnatbool][n:nat] ((g n) n) : bool

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

TPPSF Asistentes 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

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

TPPSF Asistentes 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.

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

TPPSF Asistentes 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 natnatSet– Matrix nat 5 4– prod:(n,m,k:nat)

(Matrix nat n k)(Matrix nat k m)(Matrix nat n m)

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

TPPSF Asistentes 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

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

TPPSF Asistentes para programadores - 13

4. Cálculo de ConstruccionesSintaxis

1. Términos

T ::= Set | Prop | Type

| x variables

| ( T T ) aplicación

| [ x : T ]T abstracción

| ( x : T) T producto

| T T tipo 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)

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

TPPSF Asistentes para programadores - 14

Sintaxis (cont.)

2. Contextos::=| x:T

3. Definiciones

def ::= C:= T

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

TPPSF Asistentes 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.

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

TPPSF Asistentes para programadores - 16

Sustitución

Definición [sustitución] sean t y u dos términos y x una variable.

t[xu] 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.

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

TPPSF Asistentes para programadores - 17

Reglas de ReducciónDefinició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 *

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

TPPSF Asistentes 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 tu y es un -redex si tu

• Un término t está en -forma normal si ninguno de sus terminos es un -redex (idem para -forma normal y -forma normal).

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

TPPSF Asistentes 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 = { <Prop,Prop,Prop>, <Set, Prop, Prop>, <Typei, Prop, Prop>, <Set, Set, Set>, <Prop, Set, Set >, <Typei, Set, Set>,

<Set,Typei,Typei>, <Prop,Typei,Typei>, <Typei, Typej, Typemax{i,j} > | iN }

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

TPPSF Asistentes para programadores - 20

Juicio de Tipabilidad (cont)Reglas de Buena formación de Contextos

[ ] bien formado

x:T bien formadoDECLARACION DE VARIABLES

x T:s

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

TPPSF Asistentes para programadores - 21

Juicio de Tipabilidad (cont)Reglas de Tipado

Set:TypeAX1

(x:T)U : s3

<s1,s2,s3>R ( PROD), x:T U:s2

Prop:TypeAX2

T:s1

Tipei:Type i+1

AXi

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

TPPSF Asistentes 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:sABSTR

, x:T t:U

(f t) : U [xt]

f:(x:T)UAPP

t:T

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

TPPSF Asistentes para programadores - 23

Juicio de Tipabilidad (cont)Reglas de Tipado

t: U(CONV)

U:s t:T TU

Ejercicio: sabiendo que AB 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 reglade tipado de la AB.

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

TPPSF Asistentes 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

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

TPPSF Asistentes 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* A1 y A * A2 entonces existe C tal

que A1* C y A2* C .

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

TPPSF Asistentes para programadores - 27

Más Propiedades del Cálculo de Construcciones

Decidibilidad del tipadoExiste 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.

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

TPPSF Asistentes para programadores - 28

Problemas ligados al tipado

1. Chequeo de tipos:U:V ?

2. Inferencia de tipos: Dados yU existe V tal que U:V ?

3. Vacuidad de un tipo:Dados yV existe U tal que U:V ?

Los problemas 1 y 2 son decidibles en el cálculo de construcciones, 3 no lo es.