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.
46 Capítulo 5. Heurísticas para <strong>la</strong> inducción y recursion general<br />
map-arbol :: ′ a arbol ⇒ ( ′ a ⇒ ′ b) ⇒ ′ b arbol and<br />
map-bosque :: ′ a bosque ⇒ ( ′ a ⇒ ′ b) ⇒ ′ b bosque where<br />
map-arbol Hoja h = Hoja<br />
| map-arbol (Nodo x b) h = Nodo (h x) (map-bosque b h)<br />
| map-bosque Vacio h = Vacio<br />
| map-bosque (ConsB a b) h = ConsB (map-arbol a h) (map-bosque b h)<br />
Lema 5.3.4 (Ejemplo <strong>de</strong> inducción cruzada).<br />
1. ap<strong>la</strong>na-arbol (map-arbol a h) = map h (ap<strong>la</strong>na-arbol a)<br />
2. ap<strong>la</strong>na-bosque (map-bosque b h) = map h (ap<strong>la</strong>na-bosque b)<br />
lemma ap<strong>la</strong>na-arbol (map-arbol a h) = map h (ap<strong>la</strong>na-arbol a)<br />
∧ ap<strong>la</strong>na-bosque (map-bosque b h) = map h (ap<strong>la</strong>na-bosque b)<br />
proof (induct-tac a and b)<br />
show ap<strong>la</strong>na-arbol (map-arbol Hoja h) = map h (ap<strong>la</strong>na-arbol Hoja) by simp<br />
next<br />
fix x b<br />
assume HI: ap<strong>la</strong>na-bosque (map-bosque b h) = map h (ap<strong>la</strong>na-bosque b)<br />
have ap<strong>la</strong>na-arbol (map-arbol (Nodo x b) h)<br />
= ap<strong>la</strong>na-arbol (Nodo (h x) (map-bosque b h)) by simp<br />
also have . . . = (h x)#(ap<strong>la</strong>na-bosque (map-bosque b h)) by simp<br />
also have . . . = (h x)#(map h (ap<strong>la</strong>na-bosque b)) using HI by simp<br />
also have . . . = map h (ap<strong>la</strong>na-arbol (Nodo x b)) by simp<br />
finally show ap<strong>la</strong>na-arbol (map-arbol (Nodo x b) h)<br />
= map h (ap<strong>la</strong>na-arbol (Nodo x b)) .<br />
next<br />
show ap<strong>la</strong>na-bosque (map-bosque Vacio h) = map h (ap<strong>la</strong>na-bosque Vacio) by simp<br />
next<br />
fix a b<br />
assume HI1: ap<strong>la</strong>na-arbol (map-arbol a h) = map h (ap<strong>la</strong>na-arbol a)<br />
and HI2: ap<strong>la</strong>na-bosque (map-bosque b h) = map h (ap<strong>la</strong>na-bosque b)<br />
have ap<strong>la</strong>na-bosque (map-bosque (ConsB a b) h)<br />
= ap<strong>la</strong>na-bosque (ConsB (map-arbol a h) (map-bosque b h)) by simp<br />
also have . . . = ap<strong>la</strong>na-arbol(map-arbol a h)@ap<strong>la</strong>na-bosque(map-bosque b h)<br />
by simp<br />
also have . . . = (map h (ap<strong>la</strong>na-arbol a))@(map h (ap<strong>la</strong>na-bosque b))<br />
using HI1 HI2 by simp<br />
also have . . . = map h (ap<strong>la</strong>na-bosque (ConsB a b)) by simp<br />
finally show ap<strong>la</strong>na-bosque (map-bosque (ConsB a b) h)