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