La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión."— Transcripción de la presentación:

1

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

3 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

4 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.

5 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)

6 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)

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

8 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.

9 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).

10 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.

11 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.

12 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)

13 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.

14 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

15 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.

16 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!!

17 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.

18 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.

19 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.

20 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)

21 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.

22 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

23 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

24 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)))

25 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

26 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)

27 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)

28 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)

29 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)

30 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)

31 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)

32 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)

33 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))

34 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)

35 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

36 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

37 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.

38 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)


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

Presentaciones similares


Anuncios Google