tppsfcálculo de construcciones inductivas - 1 5. cálculo de construcciones inductivas parte i:...
TRANSCRIPT
![Page 1: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/1.jpg)
TPPSF Cálculo de Construcciones Inductivas - 1
5. Cálculo de Construcciones
Inductivas
Parte I: Inducción y Recursión
![Page 2: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/2.jpg)
TPPSF Cá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
![Page 3: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/3.jpg)
TPPSF Cá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.
![Page 4: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/4.jpg)
TPPSF Cá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)
![Page 5: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/5.jpg)
TPPSF Cá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)
![Page 6: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/6.jpg)
TPPSF Cá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))
![Page 7: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/7.jpg)
TPPSF Cá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.
![Page 8: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/8.jpg)
TPPSF Cá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).
![Page 9: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/9.jpg)
TPPSF Cá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 c1,...cn:
Cases x of c1 q1
| …
| cn qn
end : Q
Ejemplo: [n:nat] Cases n of 0 true
| (S m) falseend
es una función de nat bool que decide si un numero es cero o no.
![Page 10: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/10.jpg)
TPPSF Cá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 | false false false
end.
![Page 11: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/11.jpg)
TPPSF Cá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
c1 q1
…
cn qn
end: (Q x)
• Tiene más sentido en el contexto de definiciones recursivas y pruebas de propiedades (más adelante)
![Page 12: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/12.jpg)
TPPSF Cálculo de Construcciones Inductivas - 12
Tácticas en Coqpara el análisis de casos
• Aplicación de constructores– Apply ci
– Constructor i (= Intros ; Apply ci ) - Constructor
• Discriminación de constructores– Discriminate H (prueba cualquier cosa si H: t1=t2, con t1y t2
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.
![Page 13: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/13.jpg)
TPPSF Cá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 [x1 : I1, … xn:In ] : Q := e
La expresión e en general será un Case en algun xi , 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 x1 : I1, … xn:In .
*Para que un llamado recursivo sea correcto debe realizarse sobre un elemento estructuralmente más pequeño
![Page 14: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/14.jpg)
TPPSF Cálculo de Construcciones Inductivas - 14
Recursión - EjemplosRecursió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.
![Page 15: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/15.jpg)
TPPSF Cá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!!
![Page 16: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/16.jpg)
TPPSF Cá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.
![Page 17: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/17.jpg)
TPPSF Cá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.
![Page 18: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/18.jpg)
TPPSF Cá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 c1 p1
| … | cn pn
end: ( P x )
similar a la definición de una función.
![Page 19: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/19.jpg)
TPPSF Cá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)
![Page 20: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/20.jpg)
TPPSF Cá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)
<Array >
} : m=m
<[m:nat]m=m>
El tipo se pone explícito cuando depende del objeto desestructurado.
![Page 21: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/21.jpg)
TPPSF Cá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
![Page 22: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/22.jpg)
TPPSF Cálculo de Construcciones Inductivas - 22
Consecuencias del significado de una Definición Inductiva (IV)
4. InducciónPara 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
![Page 23: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/23.jpg)
TPPSF Cálculo de Construcciones Inductivas - 23
Pruebas por Inducción en CoqEjemplos
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: nate: (Even n)
(P 0)
n:nate: (Even n)
(x:nat)(Even x) (P x) (P(S(S x)))
![Page 24: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/24.jpg)
TPPSF Cá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
![Page 25: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/25.jpg)
TPPSF Cálculo de Construcciones Inductivas - 25
Destructores - Ejemplos
Inductive nat : Set := 0 : nat
| S : nat nat
nat_ind: (P:natProp) (P 0) ((x:nat) (P x)(P(S x)))
(n:nat) (P n)
nat_rec: (A:natSet) (A 0) ((x:nat) (A x)(A(S x)))
(n:nat) (A n)
nat_rect: (T:natType) (T 0) ((x:nat) (T x)(T(S x)))
(n:nat) (T n)
![Page 26: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/26.jpg)
TPPSF Cá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)
![Page 27: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/27.jpg)
TPPSF Cá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)
![Page 28: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/28.jpg)
TPPSF Cá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:natProp) (P 0)
((x:nat) (Even x) (P x)(P (S (S x))))
(n:nat) (Even n) (P n)
![Page 29: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/29.jpg)
TPPSF Cá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: nate: (Even n)
(P 0)
n:nate: (Even n)
(x:nat)(Even x) (P x) (P(S(S x)))
Elim = Apply el destructor correspondiente
(= Apply nat_rec)
(= Apply Even_ind)
![Page 30: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/30.jpg)
TPPSF Cálculo de Construcciones Inductivas - 35
Notaciones en el lenguaje matemáticoElementos 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
![Page 31: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/31.jpg)
TPPSF Cá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.
![Page 32: TPPSFCálculo de Construcciones Inductivas - 1 5. Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión](https://reader036.vdocuments.net/reader036/viewer/2022062315/5665b47b1a28abb57c91dbf1/html5/thumbnails/32.jpg)
TPPSF Cá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)