15.11.2014 Views

con Isabelle/Isar - Dpto. Ciencias de la Computación e Inteligencia ...

con Isabelle/Isar - Dpto. Ciencias de la Computación e Inteligencia ...

con Isabelle/Isar - Dpto. Ciencias de la Computación e Inteligencia ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.3. Recursión mutua e inducción 45<br />

5.3 Recursión mutua e inducción<br />

Nota 5.3.1 (Ejemplo <strong>de</strong> <strong>de</strong>finición <strong>de</strong> tipos mediante recursión cruzada).<br />

• Un árbol <strong>de</strong> tipo a es una hoja o un nodo <strong>de</strong> tipo a junto <strong>con</strong> un bosque <strong>de</strong> tipo a.<br />

• Un bosque <strong>de</strong> tipo a es el boque vacío o un bosque <strong>con</strong>truido añadiendo un árbol<br />

<strong>de</strong> tipo a a un bosque <strong>de</strong> tipo a.<br />

datatype ′ a arbol = Hoja | Nodo ′ a ′ a bosque<br />

and<br />

′ a bosque = Vacio | ConsB ′ a arbol ′ a bosque<br />

Nota 5.3.2 (Reg<strong>la</strong> <strong>de</strong> inducción correspondiente a <strong>la</strong> recursión cruzada). La reg<strong>la</strong> <strong>de</strong> inducción<br />

sobre árboles y bosques es (arbol bosque.induct)<br />

P1 Hoja<br />

P2 Vacio<br />

∧ P2 bosque<br />

a bosque.<br />

P1 (Nodo a bosque)<br />

∧ P1 arbol P2 bosque<br />

arbol bosque.<br />

P2 (ConsB arbol bosque)<br />

P1 arbol ∧ P2 bosque<br />

Nota 5.3.3 (Ejemplos <strong>de</strong> <strong>de</strong>finición por recursión cruzada).<br />

1. (ap<strong>la</strong>na arbol a) es <strong>la</strong> lista obtenida ap<strong>la</strong>nando el árbol a.<br />

2. (ap<strong>la</strong>na bosque b) es <strong>la</strong> lista obtenida ap<strong>la</strong>nando el bosque b.<br />

3. (map arbol a h) es el árbol obtenido aplicando <strong>la</strong> función h a todos los nodos <strong>de</strong>l<br />

árbol a.<br />

4. (map bosque b h) es el bosque obtenido aplicando <strong>la</strong> función h a todos los nodos <strong>de</strong>l<br />

bosque b.<br />

fun<br />

ap<strong>la</strong>na-arbol :: ′ a arbol ⇒ ′ a list and<br />

ap<strong>la</strong>na-bosque :: ′ a bosque ⇒ ′ a list where<br />

ap<strong>la</strong>na-arbol Hoja = []<br />

| ap<strong>la</strong>na-arbol (Nodo x b) = x#(ap<strong>la</strong>na-bosque b)<br />

| ap<strong>la</strong>na-bosque Vacio = []<br />

| ap<strong>la</strong>na-bosque (ConsB a b) = (ap<strong>la</strong>na-arbol a) @ (ap<strong>la</strong>na-bosque b)<br />

fun

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!