TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión.

Slides:



Advertisements
Presentaciones similares
Antonella Ruffa Ahumada Irene Morales Jiménez
Advertisements

Introducción al Teorema de Gödel Eduardo Alejandro Barrio UBA - CONICET 2do Cuatrimestre de 2009 Eduardo Alejandro Barrio UBA.
La aritmetización de la sintaxis
Seminario: Todo Prof. Eduardo Alejandro Barrio 1er cuatrimestre de 2006 Facultad de Filosofía y Letras, UBA.
Seminario: Interpretaciones y Modelos Conjuntistas
Diseño y análisis de algoritmos
Compiladores e intérpretes Análisis Sintáctico II
Conceptos básicos Def. Un símbolo es cualquier carácter imprimible.
TECNICATURA UNIVERSITARIA EN INFORMATICA
FACTORIZACIÓN LU Bachilleres:
funciones Por: Carlos Alberto García Acosta
Capítulo 10 Test de Hipótesis.
EL CÁLCULO LAMBDA λ.
Noción de lógica Cuantificacional
Arquitectura CLARO-TECNOTREE
Interpretando objetos
Reducción de grafos Qué es reducción normal de grafos? Ejemplo:
Chequeo e inferencia de tipos
Combinadores SK.
Maestría en Bioinformática Bases de Datos y Sistemas de Información Fundamentos de Lógica Ing. Alfonso Vicente, PMP
Taller matemático (Cálculo)
Traducción dirigida por la Sintaxis
CÁLCULO DIFERENCIAL.
ANALISIS SINTACTICO DESCENDENTE
Introducción a la Programación
CAPITULO 2 La Representación del Conocimiento
Tema 3. Optimización de Código
FUNCIONES MATEMATICAS
Funciones.
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
PROGRAMACIÓN LÓGICA.
EXPONENTES Y RADICALES
Inferencia Estadística
TPPSFProgramando pruebas Programando Pruebas Isomorfismo de Curry-Howard.
Problemas, algoritmos y programas: Modelar: Simular o programar su solución en un computador. Algoritmos: Es un conjunto finito, y no ambiguo de etapas.
ALGEBRA DE BOOLE SISTEMAS DIGITALES.
Esquema asociado a la presencia del negador. Se niega que algo sea el caso: No es el caso que B.
Sintaxis.
Estructura de Datos y Algoritmos
Conversión cadena a número
Clasificación de Gramáticas y Manejo de Errores
LOGICA DE ENUNCIADO LOGICA DE PREDICADO
Funciones Psu Matemáticas 2012.
2. Asistentes de Pruebas para Lógicos y Matemáticos II
Lógica de enunciado La lógica de enunciados o de proposiciones es el nivel más básico de análisis lógico y descansa exclusivamente en las conectivas.
Curso de Teoría del Autómata
TPPSFAsistentes para programadores Asistentes de Pruebas para Programadores Cálculo de Construcciones.
TPPSFCálculo de Construcciones Inductivas Cálculo de Construcciones Inductivas II - Inversión.
1 Samba: Un lenguaje funcional perezoso Presentación del lenguaje: qué es un programa Samba definiciones locales abstracciones lambda Tipos inductivos:
Como veremos una función es una ley de asociación entre
Matemáticas para Ciencias de la Computación MCC3182 Otra Definición Definición 2: Un árbol es un grafo conectado con n vértices y n-1 arcos. En efecto,
1. Asistentes de Pruebas para Lógicos y Matemáticos I
Pruebas de hipótesis.
INAOE CURSO PROPEDEUTICO PARA LA MAESTRIA EN ELECTRONICA
InCo 2004CFPTT Programación de Pruebas Isomorfismo de Curry-Howard.
Minitérminos, maxitérminos
Reglas Básicas del Álgebra de Boole
Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 2: Funciones, tipos y expresiones 2.1. Funciones 2.2.
LÓGICA CUANTIFICACIONAL O DE PREDICADOS
Lic. Carla Aguirre Montalvo
Programación de Computadores
Lenguaje de Programación LISP
UNSa Sede Regional Oran TEU - TUP. Un espacio vectorial (o espacio lineal) es el objeto básico de estudio del álgebra lineal.álgebra lineal A los elementos.
Operatoria de logaritmos
ARRAYS Y COLECCIONES DE DATOS. ARRAYS Arrays – Matriz – Vector Elemento del lenguaje que nos permite agrupar un conjunto de valores del mismo tipo, y.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
TEMA 2 : ALGEBRA DE MATRICES.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
JOANN GÓMEZ MAX SOLANO RAUL RUSTRIAN ECUACIONES DE SEGUNDO GRADO BUENAS SOMOS JOANN, RAUL Y MAX Y LES PRESENTAMOS EL TEMA ECUACIONES DE SEGUNDO GRADO.
Transcripción de la presentación:

TPPSFCálculo de Construcciones Inductivas Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión

TPPSFCálculo de Construcciones Inductivas - 2 Tipos (conjuntos) Inductivos Inductive nat : Set := 0 : nat | S : nat  nat Inductive natlist : Set := nil : natlist | cons : nat  natlist  natlist Inductive bool : Set := true : bool | false : bool

TPPSFCálculo de Construcciones Inductivas - 3 Tipos Inductivos Paramétricos Inductive list [A:Set] : Set := nil : (list A) | cons : A  (list A)  (list A) Parámetros: son los argumentos que estan fijos y son globales en toda una definición.

TPPSFCálculo de Construcciones Inductivas - 4 Familias Inductivas de Tipos Inductive array[A:Set] : nat  Set := empty : (array A 0) | add : (n:nat) A  (array A n)  (array A (S n)) Inductive matrix[A:Set] : nat  nat  Set := one_col : (n:nat)(array A n)  (matrix A 1 n) | extend_col : (m,n:nat) (matrix A m n)  (array A n)  (matrix A (S m) n)

TPPSFCálculo de Construcciones Inductivas - 5 Familias Mutuamente Inductivas Mutual [A:Set] Inductive tree: Set := node: A  (forest A)  (tree A) with forest: Set := empty_f : (forest A) add_tree: (tree A)  (forest A)  (forest A)

TPPSFCálculo de Construcciones Inductivas - 6 Predicados Inductivos Inductive Even : nat  Prop := e0 : (Even O) | eSS : (n:nat)(Even n)  (Even (S (S n))) Inductive Le : nat  nat  Prop := le0 : (n:nat) (Le 0 n) | leS : (n,m:nat) (Le n m)  (Le (S n) (S m))

TPPSFCálculo de Construcciones Inductivas - 7 Definiciones Inductivas - Significado Cuando escribimos: Inductive nat : Set := 0 : nat | S : nat  nat estamos haciendo muchas cosas… estamos definiendo un conjunto y una manera de construir objetos en el. estamos diciendo que esta es la única forma de construir los objetos del conjunto. estamos diciendo, además, que las dadas son formas distintas de construir objetos.

TPPSFCálculo de Construcciones Inductivas - 8 Definiciones Inductivas - Constructores estamos definiendo un conjunto y una manera de construir objetos en el.  A partir de 0 y con reiteradas aplicaciones de la funcion S definimos objetos en nat. estamos diciendo que esta es la única forma de construir los objetos del conjunto.  Cualquier objeto de nat debe construirse a partir de 0 y con reiteradas aplicaciones de la función S. estamos diciendo, además, que las dadas son formas distintas de construir objetos.  Con 0 y S se construyen objetos diferentes. Luego, por ejemplo, 0  (S 0).

TPPSFCálculo de Construcciones Inductivas - 9 Consecuencias del significado de una Definición Inductiva (I) 1. Análisis de casos: Para definir un objeto en un tipo Q según un objeto de un tipo inductivo I definido con constructores c 1,...c n : Cases x of c 1  q 1 | … | c n  q n end : Q Ejemplo: [n:nat] Cases n of 0  true | (S m)  false end es una función de nat  bool que decide si un numero es cero o no.

TPPSFCálculo de Construcciones Inductivas - 10 Análisis de casos - Ejemplos Definition pred := [n:nat] Cases n of 0  0 |(S m)  m end. Definition boolOr := [b1,b2: bool] Cases b1,b2 of true _  true | _true  true |falsefalse  false end.

TPPSFCálculo de Construcciones Inductivas - 11 Análisis de casos dependiente El tipo del objeto definido puede también depender del objeto del tipo inductivo sobre el cual se analizan casos: Case x of c 1  q 1 … c n  q n end: (Q x) Tiene más sentido en el contexto de definiciones recursivas y pruebas de propiedades (más adelante)

TPPSFCálculo de Construcciones Inductivas - 12 Tácticas en Coq para el análisis de casos Aplicación de constructores –Apply c i –Constructor i (= Intros ; Apply c i ) - Constructor Discriminación de constructores –Discriminate H (prueba cualquier cosa si H: t 1 =t 2, con t 1 y t 2 construídos con distintos constructores) Inyectividad de constructores –Injection H (saca constructores iguales de una igualdad) En general... –Simplify_eq (aplica Discriminate o Injection) Ver reference manual, secc. 7.6 y 7.9.

TPPSFCálculo de Construcciones Inductivas - 13 Consecuencias del significado de una Definición Inductiva (II) 2. Recursión: Para definir recursivamente un objeto en un tipo Q haciendo recursión en un objeto de un tipo inductivo I. Fixpoint f [x 1 : I 1, … x n :I n ] : Q := e La expresión e en general será un Case en algun x i, y podrá contener a f bajo ciertas condiciones sintácticas* que aseguran la terminación. Estas condiciones se chequean sobre el último argumento de la lista x 1 : I 1, … x n :I n. *Para que un llamado recursivo sea correcto debe realizarse sobre un elemento estructuralmente más pequeño

TPPSFCálculo de Construcciones Inductivas - 14 Recursión - Ejemplos Recursión en el segundo argumento Fixpoint add [n, m:nat] : nat := Cases m of 0  n |(S k)  (S (add n k)) end. ¿Recursión en el primer argumento? Fixpoint add [n:nat] : nat  nat := [m:nat] Cases n of 0  m | (S k)  (S (add k m)) end.

TPPSFCálculo de Construcciones Inductivas - 15 Recursión - Más ejemplos Fixpoint add [n, m:nat] : nat := Cases n m of _ 0  n | 0 (S k)  (S k) | (S p) (S k)  (S (S (add p k))) end Fixpoint add [n, m:nat] : nat := Cases n m of _ 0  n | 0 (S k)  (S k) | (S p) (S k)  (S (S (add k p))) end. ¡¡No pasa la condición de terminación!!

TPPSFCálculo de Construcciones Inductivas - 16 Recursión - Más ejemplos Fixpoint even [n:nat] : bool := Cases n of 0  true |(S k)  Cases k of 0  false |(S m)  (even m) end end. Fixpoint mod2 [n:nat] : nat := Cases n of 0  0 | (S 0)  (S 0) | (S (S m))  (mod2 m) end.

TPPSFCálculo de Construcciones Inductivas - 17 Recursión Mutua - Ejemplos Fixpoint even [n:nat] : bool := Cases n of 0  true | (S k)  (odd k) end with odd [n:nat] : bool := Cases n of 0  false | (S k)  (even k) end. Fixpoint tree_size [t:tree] : nat := Cases t of (node a f )  (S (forest_size f )) end with forest_size [f:forest] : nat := Cases f of empty_f  0 | (add_tree t x )  (plus (tree_size t )(forest_size x )) end.

TPPSFCálculo de Construcciones Inductivas - 18 Consecuencias del significado de una Definición Inductiva (III) Prueba de una propiedad P (: Prop) de un objeto de un tipo inductivo 3. Más análisis de casos: Para probar P por casos en un objeto x de tipo I Cases x of c 1  p 1 | … | c n  p n end: ( P x ) similar a la definición de una función.

TPPSFCálculo de Construcciones Inductivas - 19 Análisis de casos no dependientes Cases m of 0  0 |(S k)  k end. Cases m of 0  True |(S k)  False end. Fixpoint F…… Cases m of 0  nat |(S k)  nat  (F k) end. El tipo es nat El tipo es Prop El tipo es Set Fixpoint ZZ….. Cases m of 0  (nil nat) |(S k)  (cons nat 0 (ZZ k)) end. El tipo es (List nat)

TPPSFCálculo de Construcciones Inductivas - 20 Análisis de casos dependientes Fixpoint null [m:nat] : (Array m) := Cases m of 0  empty |(S k)  (add k 0 (null k)) end. Cases m of 0  (refl nat 0) |(S k)  (refl (S k) (S k)) end. } : (Array m) } : m=m El tipo se pone explícito cuando depende del objeto desestructurado.

TPPSFCálculo de Construcciones Inductivas - 21 Pruebas por casos en Coq - Tácticas Case n  n: nat  (P n)   (P 0)   (x:nat)(P(S x)) Destruct n   (n: nat)(P n)  n:nat  (P 0)  n:nat (x: nat)(P(S x)) Case : genera los casos Destruct : aplica Intros antes y despues Case

TPPSFCálculo de Construcciones Inductivas - 22 Consecuencias del significado de una Definición Inductiva (IV) 4. Inducción Para probar una propiedad P utilizando el principio de inducción primitiva asociado a la definición inductiva de un tipo I. Tácticas: –Elim x: genera los casos según la definición de x, con sus hipótesis inductivas –Induction x: aplica Intros antes y después Elim ver reference manual secc. 7.7

TPPSFCálculo de Construcciones Inductivas - 23 Pruebas por Inducción en Coq Ejemplos Elim n  n: nat  (P n)  n:nat (P 0)  n:nat (x:nat)(P x)  (P(S x)) Elim e  n: nat e: (Even n) (P n)  n: nat e: (Even n)  (P 0)  n:nat e: (Even n)  (x:nat)(Even x)  (P x)  (P(S(S x)))

TPPSFCálculo de Construcciones Inductivas - 24 Destructores Cuando se define un tipo inductivo I, Coq genera tres constantes correspondientes a los principios de recursión e inducción: –I_ind es el principio de inducción para Prop implementa el principio de inducción estructural para objetos de I. –I_rec es el principio de inducción para Set permite hacer definiciones recursivas sobre objetos de I. –I_rect es el principio de inducción para Type permite definir familias recursivas de tipos. ver reference manual secc 1.3.3

TPPSFCálculo de Construcciones Inductivas - 25 Destructores - Ejemplos Inductive nat : Set := 0 : nat | S : nat  nat nat_ind: (P:nat  Prop) (P 0)  ((x:nat) (P x)  (P(S x)))  (n:nat) (P n) nat_rec: (A:nat  Set) (A 0)  ((x:nat) (A x)  (A(S x)))  (n:nat) (A n) nat_rect: (T:nat  Type) (T 0)  ((x:nat) (T x)  (T(S x)))  (n:nat) (T n)

TPPSFCálculo de Construcciones Inductivas - 26 Destructores - Ejemplos Inductive list [A:Set] : Set := nil : (list A) | cons : A  (list A)  (list A) list_ind: (A:set) (P:(list A)  Prop) (P (nil A))  ((a:A) (x: list A) (P x)  (P (cons A a x)))  (l: list A) (P l)

TPPSFCálculo de Construcciones Inductivas - 27 Destructores - Ejemplos Inductive array [A:Set] : nat  Set := empty : (array A 0) | add : (n:nat) A  (array A n)  (array A (S n)) array_ind: (A:set) (P:(n:nat)(array A n)  Prop) (P 0 (empty A))  ((n:nat)(a:A)(x: array A n)(P n x)  (P (S n) (add A n a x)))  (n:nat)(v: (array A n)) (P n v)

TPPSFCálculo de Construcciones Inductivas - 28 Destructores - Ejemplos Inductive Even : nat  Prop := e0 : (Even O) | eSS : (n:nat)(Even n)  (Even (S (S n))) Even_ind: (P:nat  Prop)  (P 0)  ((x:nat) (Even x)  (P x)  (P (S (S x))))  (n:nat) (Even n)  (P n)

TPPSFCálculo de Construcciones Inductivas - 29 Tácticas y Destructores Elim n  n: nat  (A n)  n:nat (A 0)  n:nat (x:nat)(A x)  (A(S x)) Elim H  n: nat e: (Even n) (P n)  n: nat e: (Even n)  (P 0)  n:nat e: (Even n)  (x:nat)(Even x)  (P x)  (P(S(S x))) Elim = Apply el destructor correspondiente (= Apply nat_rec) (= Apply Even_ind)

TPPSFCálculo de Construcciones Inductivas - 30 Conectivos: Definición Inductiva Los conectivos , ,  y  se definen como constructores de porposiciones inductivos: Inductive and [A,B:Prop] Prop := conj: A  B  (and A B) Inductive or [A,B:Prop] Prop := or_introl: A  (or A B) | or_intror: B  (or A B)

TPPSFCálculo de Construcciones Inductivas - 31 Conectivos - Destructores Inductive and [A,B:Prop] Prop := conj: A  B  (and A B)  and_ind: (A,B,P:Prop) (A  B  P)  (A  B  P) Inductive or [A,B:Prop] Prop := or_introl: A  (or A B) | or_intror: B  (or A B)  or_ind: (A,B,P:Prop) (A  P)  (B  P)  (A  B  P)

TPPSFCálculo de Construcciones Inductivas - 32 Más Conectivos... Inductive True: Prop := I : True  True_ind: (P: Prop) P  True  P Inductive False: Prop :=  False_ind: (P: Prop) False  P Inductive eq [A:Set][x:A]: A  Prop := refl_equal: (eq A x x)  eq_ind: (A:Set) (x:A) (P: A  Prop) (P x)  ((y:A)(eq x y)  (P y))

TPPSFCálculo de Construcciones Inductivas - 33 Cuantificador Existencial Inductive ex [A:Set] [P:A  Prop] :Prop := ex_intro: (x:A) (P x)  (ex A P)  ex_ind: (A:Set) (P: A  Prop) (Q:Prop) ((x:A)(P x)  Q)  ((ex A P)  Q)

TPPSFCálculo de Construcciones Inductivas - 34 Resumiendo: Cálculo de Construcciones Inductivas - Sintaxis T := Set | Type | Prop | x variables | c constantes definidas | ( T T ) aplicación | [ x : T ]T abstracción | ( x : T) T producto | T  T tipo de las funciones | Inductive x [x:T,..x:T] : T := c:T | …| c:T def. ind. | Cases T of T  T |...| T  T end def. casos | Fixpoint x [x:T,..x:T] : T := T def. recursiva

TPPSFCálculo de Construcciones Inductivas - 35 Notaciones en el lenguaje matemático Elementos canónicos y no canónicos Elementos canónicos de un tipo: –aquellos cuyo significado es primitivo (valores). – Ej: 0, (S 0), (S (S 0)), son elementos canónicos de nat Elementos no canónicos de un tipo: –son notaciones o abreviaturas que deben poder desabreviarse para conocer su significado. –Tienen significado únicamente si denotan un elemento canónico. – Ej: (S 0)+0, (S 0)+(S (S 0)), (pred 0), son elementos NO canónicos de nat

TPPSFCálculo de Construcciones Inductivas - 36 Elementos canónicos y no canónicos Constructores del tipo inductivo I: son métodos para construir los elementos canónicos del tipo. Eliminadores del tipo inductivo I: permiten construir elementos no canónicos de un tipo Q (Q puede ser igual a I, o incluso Q puede ser Prop). Regla de cálculo asociada a los eliminadores (o destructores) de tipos inductivos :  –se aplica cuando el destructor está aplicado a un término en forma de constructor.

TPPSFCálculo de Construcciones Inductivas - 37 Reducción Iota - Ejemplos (pred 0)   ( [n:nat] Cases n of 0  0 | (S m)  m end 0)  Cases 0 of 0  0 | (S m)  m end  0 (pred (S (S 0)))   ( [n:nat] Cases n of 0  0 | (S m)  m end (S (S 0)))  Cases (S (S 0)) of 0  0 | (S m)  m end  (S 0)