<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pabgermen</id>
	<title>Lógica matemática y fundamentos (2014-15) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LMF2015/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pabgermen"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php/Especial:Contribuciones/Pabgermen"/>
	<updated>2026-07-20T08:45:26Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2b&amp;diff=136</id>
		<title>Relación 2b</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2b&amp;diff=136"/>
		<updated>2015-02-19T12:36:43Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2b: Sintaxis y semántica de la Lógica proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
Un rey somete a un prisionero a la siguiente prueba: lo enfrenta a dos&lt;br /&gt;
puertas, de las que el prisionero debe elegir una, y entrar en la habitación correspondiente.&lt;br /&gt;
Se informa al prisionero que en cada una de las habitaciones puede haber un&lt;br /&gt;
tigre o una dama. Como es natural, el prisionero debe elegir la puerta que le lleva a&lt;br /&gt;
la dama (entre otras cosas, para no ser devorado por el tigre). Para ayudarle, en cada&lt;br /&gt;
puerta hay un letrero:&lt;br /&gt;
&lt;br /&gt;
* puerta 1: en esta habitación hay una dama y en la otra un tigre.&lt;br /&gt;
* puerta 2: en una de estas habitaciones hay una dama y en una de estas habitaciones&lt;br /&gt;
hay un tigre.&lt;br /&gt;
&lt;br /&gt;
Sabiendo que uno de los carteles dice la verdad y el otro no, determinar la puerta que&lt;br /&gt;
debe de elegir el prisionero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
(Nota: Podemos suponer que en una habitacion hay un tigre o una dama &lt;br /&gt;
exclusivamente pues si se diera que en una misma habitación estuviera &lt;br /&gt;
el tigre y la dama, el prisionero no debería estar buscando &lt;br /&gt;
la habitación de la dama, pues si la encontrara el resultado sería desastroso)&lt;br /&gt;
&lt;br /&gt;
Entonces podemos suponer que si el tigre no está en una entonces está en la otra&lt;br /&gt;
y análogamente con la dama.&lt;br /&gt;
&lt;br /&gt;
 p:&amp;quot;Tigre en 1 y Dama en 2&amp;quot;&lt;br /&gt;
 ¬p:&amp;quot;Tigre en 2 y Dama en 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Luego tenemos, segun lo que ha dicho el Rey que:&lt;br /&gt;
&lt;br /&gt;
(p ⋁ ¬p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Puerta 1 dice &amp;quot;En esta habitacion hay una dama y en la otra un tigre&amp;quot;&lt;br /&gt;
           es decir 1 dice: p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     q: &amp;quot;En una habitacion hay una dama&amp;quot;&lt;br /&gt;
     s: &amp;quot;En una habitacion hay un tigre&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Puerta 2 dice &amp;quot;En una de estas habitaciones hay un tigre&lt;br /&gt;
                y en una de estas habitaciones hay una dama&amp;quot;&lt;br /&gt;
                  es decir 2 dice: q ⋀ s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 a: 1 dice verdad&lt;br /&gt;
 b: 2 dice verdad&lt;br /&gt;
&lt;br /&gt;
Tenemos entonces por el enunciado que a&amp;lt;---&amp;gt;¬b&lt;br /&gt;
&lt;br /&gt;
Supongamos: que 1 dice la verdad (I(a)=1)si y solo si2 miente(I(¬b)=1)&lt;br /&gt;
y entonces tenemos que en  la habitacion 1 hay una dama y en la otra un tigre(I(p)=1) y que en ninguna &lt;br /&gt;
habitacion hay una tigre y en ninguna hay una dama(I(¬(q ⋀ s), y esto &lt;br /&gt;
implicaria que en 1 no hay dama ni tigre y en dos tampoco.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
F= (p ⋁ ¬p) ⋀ ((a &amp;lt;––&amp;gt; ¬b) ——&amp;gt; (p ⋀ (¬(q ⋀ s)—–&amp;gt;(¬(p ⋁ ¬p)))))&lt;br /&gt;
&lt;br /&gt;
Pero para nuestra interpretación I(F)={I(a) = I(¬b) = I(p) = I(¬(q ⋀ s)) = 1}&lt;br /&gt;
nos sale que I(F)=0&lt;br /&gt;
&lt;br /&gt;
Luego La puerta 1 no dice la verdad y la puerta 2 dice la verda, y por tanto en  la habitación 1 está el tigre&lt;br /&gt;
y en la habitacion 2 está la dama que es por donde debe escapar el prisionero&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Sean S y T conjuntos de fórmulas. Demostrar o refutar las siguientes&lt;br /&gt;
afirmaciones: &lt;br /&gt;
* Si S es consistente y T es inconsistente, entonces S ∪ T es inconsistente.&lt;br /&gt;
* Si S es consistente y T es inconsistente, entonces S ∩ T es consistente.&lt;br /&gt;
* Si S es consistente y T es inconsistente, entonces S ∪ T es inconsistente.&lt;br /&gt;
* Si S es consistente y T es inconsistente, entonces S ∩ T es consistente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Da un ejemplo de tres fórmulas F₁ , F₂ , y F₃ tales que F₁ ∧ F₂ ∧ F₃ sea&lt;br /&gt;
insatisfactible y donde cualquier conjunción de todas ellas menos una sea&lt;br /&gt;
satisfactible. Generalízalo a n fórmulas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Daremos un ejemplo del caso general. Para ello basta tomar F_i tautología, F_j satisfacible con i=/j y el resto de fórmulas F_k insatisfacibles con k=/i,j siendo i,j,k \in {1,2,...,n}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Probar que la fórmula (((p → q) → p) → p) es una tautología  &lt;br /&gt;
* Si definimos recursivamente A(0) = (p → q) y A(n+1) = (A(n) → p), ¿para qué&lt;br /&gt;
valores de n es A es una tautología?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=91</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=91"/>
		<updated>2015-02-12T20:07:23Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología. Obtendríamos entonces los siguientes subconjuntos:&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2, F_3} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_3} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2, F_3} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_1} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_3} (consistente por ser F_3 una tautología)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad donde el 0 representa que la fórmula no es satisfacible, y el 1 que sí es satisfacible:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
La respuesta es falsa. Consideremos la fórmula F dada mediante:&lt;br /&gt;
&lt;br /&gt;
(p v (q &amp;amp; -q)) la cual es satisfacible (tomar por ejemplo el modelo (p,q)=(1,1))&lt;br /&gt;
&lt;br /&gt;
Tenemos que el conjunto de subfórmulas de F viene dado a través de:&lt;br /&gt;
&lt;br /&gt;
Subf(F) = { (p v (q &amp;amp; -q)), p, (q &amp;amp; -q), q, -q}&lt;br /&gt;
&lt;br /&gt;
Observemos que la subfórmula (q &amp;amp; -q) no es satisfacible, con lo cual ya hemos encontrado un contraejemplo válido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos - (negación), v (disyunción) y &amp;amp; (conjunción)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que la respuesta es falsa, ya que para todo fórmula F, el conjunto de subfórmulas de F contendrá a las fórmulas atómicas, las cuales nunca son válidas.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=90</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=90"/>
		<updated>2015-02-12T20:03:19Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología. Obtendríamos entonces los siguientes subconjuntos:&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2, F_3} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_2} (no consistente por ser F_1 y F_2 insatisfacibles)&lt;br /&gt;
&lt;br /&gt;
{F_1, F_3} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2, F_3} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_1} (no consistente por ser F_1 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_2} (no consistente por ser F_2 insatisfacible)&lt;br /&gt;
&lt;br /&gt;
{F_3} (consistente por ser F_3 una tautología)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad donde el 0 representa que la fórmula no es satisfacible, y el 1 que sí es satisfacible:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
La respuesta es falsa. Consideremos la fórmula F dada mediante:&lt;br /&gt;
&lt;br /&gt;
(p v (q &amp;amp; -q)) la cual es satisfacible (tomar por ejemplo el modelo (p,q)=(1,1))&lt;br /&gt;
&lt;br /&gt;
Tenemos que el conjunto de subfórmulas de F viene dado a través de:&lt;br /&gt;
&lt;br /&gt;
Subf(F) = { (p v (q &amp;amp; -q)), p, (q &amp;amp; -q), q, -q}&lt;br /&gt;
&lt;br /&gt;
Observemos que la subfórmula (q &amp;amp; -q) no es satisfacible, con lo cual ya hemos encontrado un contraejemplo válido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos - (negación), v (disyunción) y &amp;amp; (conjunción)&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=89</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=89"/>
		<updated>2015-02-12T19:59:26Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad donde el 0 representa que la fórmula no es satisfacible, y el 1 que sí es satisfacible:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
La respuesta es falsa. Consideremos la fórmula F dada mediante:&lt;br /&gt;
&lt;br /&gt;
(p v (q &amp;amp; -q)) la cual es satisfacible (tomar por ejemplo el modelo (p,q)=(1,1))&lt;br /&gt;
&lt;br /&gt;
Tenemos que el conjunto de subfórmulas de F viene dado a través de:&lt;br /&gt;
&lt;br /&gt;
Subf(F) = { (p v (q &amp;amp; -q)), p, (q &amp;amp; -q), q, -q}&lt;br /&gt;
&lt;br /&gt;
Observemos que la subfórmula (q &amp;amp; -q) no es satisfacible, con lo cual ya hemos encontrado un contraejemplo válido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos - (negación), v (disyunción) y &amp;amp; (conjunción)&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=88</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=88"/>
		<updated>2015-02-12T19:49:12Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad donde el 0 representa que la fórmula no es satisfacible, y el 1 que sí es satisfacible:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=87</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=87"/>
		<updated>2015-02-12T19:46:07Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=86</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=86"/>
		<updated>2015-02-12T19:45:26Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Construyamos el siguiente esquema de tabla de verdad:&lt;br /&gt;
&lt;br /&gt;
F G | F -&amp;gt; G&lt;br /&gt;
&lt;br /&gt;
0 0 | 0 1* 0 (I1)&lt;br /&gt;
0 1 | 0 1* 1 (I2)&lt;br /&gt;
1 0 | 1 0* 0 (I3)&lt;br /&gt;
1 1 | 1 1* 1 (I4)&lt;br /&gt;
&lt;br /&gt;
Mediante * hemos denotado al resultado de la fórmula (F -&amp;gt; G). Como partimos de que (F -&amp;gt; G) es satisfacible, nos fijamos únicamente en los modelos I1, I2 e I4. Sin embargo, al decirnos que F es satisfacible, debemos eliminar los modelos I1 e I2, ya que en ellos F no es satisfacible. Por lo tanto, obtenemos que el modelo restante para (F -&amp;gt; G) y F satisfacibles es el modelo I4 en el cual G también es satisfacible. Por lo tanto, la respuesta a la pregunta es afirmativa.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=85</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=85"/>
		<updated>2015-02-12T19:35:49Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=84</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=84"/>
		<updated>2015-02-12T19:35:23Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Creo que sí. Bastaría tomar un conjunto S = {F_1, F_2, F_3} de modo que dos de ellas fueran insatisfacibles y la restante fuera una tautología.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=83</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=83"/>
		<updated>2015-02-12T19:27:41Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Vamos a definir la función prof(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
prof(F) = 0 ...................................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + prof(G) ........................ si F es -G&lt;br /&gt;
&lt;br /&gt;
prof(F) = 1 + max{prof(G),prof(H)} ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=82</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=82"/>
		<updated>2015-02-12T19:16:52Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 ...................... si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) ................ si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) ..... si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=81</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=81"/>
		<updated>2015-02-12T19:12:55Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
(D -&amp;gt; C)&lt;br /&gt;
&lt;br /&gt;
-C&lt;br /&gt;
&lt;br /&gt;
||- -D&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
((V v P) -&amp;gt; (R &amp;amp; F))&lt;br /&gt;
&lt;br /&gt;
((F v N) -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
||- (V -&amp;gt; A)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((T &amp;amp; P) -&amp;gt; -L)&lt;br /&gt;
&lt;br /&gt;
T&lt;br /&gt;
&lt;br /&gt;
||- (L -&amp;gt; -P)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
((A &amp;amp; -B) -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
(A v B)&lt;br /&gt;
&lt;br /&gt;
||- (-B -&amp;gt; M)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Vamos a definir la función nv(F) como:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
nv(F) = 1 si F es atómica&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) si F es -G&lt;br /&gt;
&lt;br /&gt;
nv(F) = nv(G) + nv(H) si F es (G * H)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;He utilizado los símbolos - (negación) y * (operación binaria).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=80</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=80"/>
		<updated>2015-02-12T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;(D -&amp;gt; C)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((V v P) -&amp;gt; (R &amp;amp; F))&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((F v N) -&amp;gt; A)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- (V -&amp;gt; A)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((T &amp;amp; P) -&amp;gt; -L)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- (L -&amp;gt; -P)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((A &amp;amp; -B) -&amp;gt; M)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;(A v B)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- (-B -&amp;gt; M)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=79</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=79"/>
		<updated>2015-02-12T18:40:11Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;(D -&amp;gt; C)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((V v P) -&amp;gt; (R &amp;amp; F))&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;((F v N) -&amp;gt; A)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- (V -&amp;gt; A)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=78</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=78"/>
		<updated>2015-02-12T18:37:56Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;(V v P) -&amp;gt; (R &amp;amp; F)&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;(F v N) -&amp;gt; A&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;||- V -&amp;gt; A&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (condicional), - (negación), v (disyunción), &amp;amp; (conjunción)  y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=77</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=77"/>
		<updated>2015-02-12T18:33:05Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=76</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=76"/>
		<updated>2015-02-12T18:31:58Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=75</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=75"/>
		<updated>2015-02-12T18:31:15Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=74</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=74"/>
		<updated>2015-02-12T18:30:34Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=73</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=73"/>
		<updated>2015-02-12T18:30:13Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
D -&amp;gt; C&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
-C&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
||- -D&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=72</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=72"/>
		<updated>2015-02-12T18:29:41Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;D -&amp;gt; C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;||- -D&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=71</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=71"/>
		<updated>2015-02-12T18:29:08Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
D -&amp;gt; C&lt;br /&gt;
-C&lt;br /&gt;
||- -D&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Pablo José Gerlach Mena&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto). &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=70</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_2&amp;diff=70"/>
		<updated>2015-02-12T18:28:34Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Relación 2: Representación del conocimiento proposicional ===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 1.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Siempre que un número x es divisible por 10, acaba en 0. El número x no acaba en 0. Por lo tanto, x no es divisible por 10.&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt; &lt;br /&gt;
Usando los símbolos D: el número es divisible por 10 y C: el número acaba en cero.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
D -&amp;gt; C&lt;br /&gt;
-C&lt;br /&gt;
||- -D&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- He utilizado los símbolos -&amp;gt; (implicación), - (negación) y ||- (por tanto).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 2.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Si la válvula está abierta o la monitorización está preparada, entonces se envía una señal de reconocimiento y un mensaje de funcionamiento al controlador del ordenador. Si se envía un mensaje  de funcionamiento al controlador del ordenador o el sistema está en  estado normal, entonces se aceptan las órdenes del operador. Por lo tanto, si la válvula está abierta, entonces se aceptan las órdenes del operador.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos V: La válvula está abierta, P: La monitorización está preparada, R: Envía una señal de reconocimiento, F: Envía un mensaje de funcionamiento, A: Se aceptan órdenes del operador y N: El sistema está en estado normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 3.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Cuando tanto la temperatura como la presión atmosférica permanecen contantes, no llueve. La temperatura permanece constante. Por lo tanto, en caso de que llueva, la presión atmosférica no permanece constante.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos T: La temperatura permanece constante, P: La presión atmosférica permanece constante y L: Llueve&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 4.&amp;#039;&amp;#039;&amp;#039; Formalizar el siguiente argumento &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;En cierto experimento, cuando hemos empleado un fármaco A, el paciente ha mejorado considerablemente en el caso, y sólo en el caso, en que no se haya empleado también un fármaco B. Además, o se ha empleado el fármaco A o se ha empleado el fármaco B. En consecuencia, podemos afirmar que si no hemos empleado el fármaco B, el paciente ha mejorado considerablemente.&amp;#039;&amp;#039; &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Usando los símbolos A: Hemos empleado el fármaco A, B: Hemos empleado el fármaco B y M: El paciente ha mejorado notablemente.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 5.&amp;#039;&amp;#039;&amp;#039; Definir por recursión sobre fórmulas las siguientes funciones&lt;br /&gt;
&lt;br /&gt;
* nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,&lt;br /&gt;
: nv(p → p ∨ q) = 3.&lt;br /&gt;
* prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,&lt;br /&gt;
: prof(p → p ∨ q) = 2.&lt;br /&gt;
&lt;br /&gt;
Demostrar por inducción, que para toda fórmula F,&lt;br /&gt;
: nv(F) ≤ 2^prof(F)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 6.&amp;#039;&amp;#039;&amp;#039; ¿Existe un conjunto S de tres fórmulas tal que de todos los subconjuntos de S sólo uno es consistente?&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 7.&amp;#039;&amp;#039;&amp;#039; ¿Es cierto que si F → G y F son satisfacibles, entonces G es satisfacible? Si es cierto, dar una explicación. Si no es cierto, dar un contraejemplo.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ejercicio 8.&amp;#039;&amp;#039;&amp;#039; Demostrar o refutar las siguientes proposiciones:&lt;br /&gt;
&lt;br /&gt;
# Si F es una fórmula satisfacible, entonces todas las subfórmulas de F son satisfacibles.&lt;br /&gt;
# Existen fórmulas válidas tales que todas sus subfórmulas son válidas.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solución:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=58</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=58"/>
		<updated>2015-02-10T19:21:27Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena &lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 x y   |x== True &amp;amp;&amp;amp; y== True = False &lt;br /&gt;
            |x== True &amp;amp;&amp;amp; y== False = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== True = True&lt;br /&gt;
            |x== False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
-- Jaime Alberto &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
xor_2&amp;#039; True x = not x&lt;br /&gt;
xor_2&amp;#039; False x = x&lt;br /&gt;
&lt;br /&gt;
-- Jaime Alberto&lt;br /&gt;
xor_2&amp;#039;&amp;#039; :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2&amp;#039;&amp;#039; x y |  x== True &amp;amp;&amp;amp; y== True || x==False &amp;amp;&amp;amp; y== False = False&lt;br /&gt;
          |  x== True &amp;amp;&amp;amp; y== False || x== False &amp;amp;&amp;amp; y== True = True  &lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez:&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x | x == True = True&lt;br /&gt;
             | otherwise = True&lt;br /&gt;
xor_2 False x | x == False = False&lt;br /&gt;
              | otherwise = True&lt;br /&gt;
&lt;br /&gt;
-- Esta última no es correcta (10/02/2015).&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
-- Elisa Mazuelos Jiménez: &lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; y) || ((not x) &amp;amp;&amp;amp; y || x &amp;amp;&amp;amp; (not y))&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
perfectos x = [y|y&amp;lt;-[1..x-1], serPerfecto y]&lt;br /&gt;
serPerfecto x = x==sum (factores&amp;#039; x)&lt;br /&gt;
factores x = [y|y&amp;lt;-[1..x], rem x y == 0]&lt;br /&gt;
factores&amp;#039; x = init (factores x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y = distanciaAux xs ys&lt;br /&gt;
                           | otherwise = [1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
distancia&amp;#039; :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia&amp;#039; xs ys = sum [ 1 | (a,b)&amp;lt;-zip xs ys, a/=b]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
factoriales1 = [fact x|x&amp;lt;-[0..]]&lt;br /&gt;
fact 0 = 1&lt;br /&gt;
fact x = x*fact (x-1)&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = [1]++(zipWith f [1..] [2..])&lt;br /&gt;
               where f n y = product ([1..n]++[y])&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Por recursiÃ³n:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = 1:(aux 1 [1..])&lt;br /&gt;
               where aux n (x:xs)= (n*x):(aux (n*x) xs)&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = scanl  (*) 1 [1..]&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales1&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
&lt;br /&gt;
(0.02 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales2&lt;br /&gt;
[1,2,6,24,120,720,5040,40320,362880,3628800]&lt;br /&gt;
(0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales3&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
(0.00 secs, 528020 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales4&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
(0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
-- Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo Hoja = Hoja&lt;br /&gt;
espejo (Nodo a i d)= Nodo a (espejo d) (espejo i)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo n = (espejo . espejo) n == n&lt;br /&gt;
 &lt;br /&gt;
-- quickCheck prop_espejo&lt;br /&gt;
-- +++ OK passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
prop_espejo x = espejo (espejo x)==x&lt;br /&gt;
quickCheck prop_espejo&lt;br /&gt;
+++ OK, passed 100 tests.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducciÃ³n que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 DemostraciÃ³n por inducciÃ³n en x&lt;br /&gt;
&lt;br /&gt;
[Caso base: Hoja]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo Hoja) = espejo (Hoja) por definicion de espejo Hoja&lt;br /&gt;
espejo (Hoja) = Hoja por definicion de espejo Hoja&lt;br /&gt;
&lt;br /&gt;
Luego  espejo (espejo Hoja)= Hoja &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
[Suponemos que espejo (espejo x) = x , para todo x arbol]&lt;br /&gt;
&lt;br /&gt;
[Sea N a i d con i, d arboles]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo (N a i d))= espejo (N a (espejo d) (espejo i)) por def&lt;br /&gt;
espejo (N a (espejo d)(espejo i)) = N a (espejo (espejo i))&lt;br /&gt;
                                                        (espejo(espejo&lt;br /&gt;
                                                                d)) por def&lt;br /&gt;
&lt;br /&gt;
como i, d son arboles por hipótesis de induccion&lt;br /&gt;
&lt;br /&gt;
= N a (espejo (espejo i)) (espejo (espejo d))&lt;br /&gt;
= N a i d&lt;br /&gt;
&lt;br /&gt;
Luego espejo (espejo (N a i d)) = N a i d.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la funciÃ³n&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del Ã¡rbol x; es decir, primero visita la raÃ­z del Ã¡rbol, a&lt;br /&gt;
-- continuaciÃ³n recorre el subÃ¡rbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subÃ¡rbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden Hoja = []&lt;br /&gt;
preorden (Nodo a i d)= [a]++(preorden i)++(preorden d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- Rocio Rodriguez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la funciÃ³n&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del Ã¡rbol x; es decir, primero recorre el subÃ¡rbol&lt;br /&gt;
-- izquierdo, a continuaciÃ³n el subÃ¡rbol derecho y, finalmente, la raÃ­z&lt;br /&gt;
-- del Ã¡rbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden Hoja = []&lt;br /&gt;
postorden (Nodo a i d)= postorden i ++ [a]++ postorden d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Realizado por Nikola Drousie:&lt;br /&gt;
-- Rocio Rodriguez &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
postorden&amp;#039; :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden&amp;#039; Hoja = []&lt;br /&gt;
postorden&amp;#039; (Nodo a i d) = postorden&amp;#039; i ++ postorden&amp;#039; d ++ [a]&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (postorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = (postorden . espejo) x == (reverse . postorden) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
--quickCheck prop_recorrido&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos Hoja = 0&lt;br /&gt;
nNodos (Nodo _ i d)= 1+(nNodos i)+(nNodos d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el nÃºmero de nodos de la&lt;br /&gt;
-- imagen especular de un Ã¡rbol es el mismo que el nÃºmero de nodos del&lt;br /&gt;
-- Ã¡rbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo x = nNodos x == (nNodos . espejo) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
&lt;br /&gt;
--  quickCheck prop_nNodos_espejo&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad Hoja = 0&lt;br /&gt;
profundidad (Nodo _ i d) = 1+ max(profundidad i) (profundidad d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=29</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=29"/>
		<updated>2015-02-09T18:27:22Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y =distanciaAux xs ys&lt;br /&gt;
                           | otherwise =[1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = [1]++(zipWith f [1..] [2..])&lt;br /&gt;
               where f n y = product ([1..n]++[y])&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Por recursiÃ³n:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = 1:(aux 1 [1..])&lt;br /&gt;
               where aux n (x:xs)= (n*x):(aux (n*x) xs)&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = scanl  (*) 1 [1..]&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales1&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
&lt;br /&gt;
(0.02 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales2&lt;br /&gt;
[1,2,6,24,120,720,5040,40320,362880,3628800]&lt;br /&gt;
(0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales3&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
(0.00 secs, 528020 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; take 10 factoriales4&lt;br /&gt;
[1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
(0.00 secs, 0 bytes)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo Hoja = Hoja&lt;br /&gt;
espejo (Nodo a i d)= Nodo a (espejo d) (espejo i)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo n = (espejo . espejo) n == n&lt;br /&gt;
 &lt;br /&gt;
-- quickCheck prop_espejo&lt;br /&gt;
-- +++ OK passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- Emilio Martinez&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducciÃ³n que para todo Ã¡rbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 DemostraciÃ³n por inducciÃ³n en x&lt;br /&gt;
&lt;br /&gt;
[Caso base: Hoja]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo Hoja) = espejo (Hoja) por definicion de espejo Hoja&lt;br /&gt;
espejo (Hoja) = Hoja por definicion de espejo Hoja&lt;br /&gt;
&lt;br /&gt;
Luego  espejo (espejo Hoja)= Hoja &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
[Suponemos que espejo (espejo x) = x , para todo x arbol]&lt;br /&gt;
&lt;br /&gt;
[Sea N a i d con i, d arboles]&lt;br /&gt;
&lt;br /&gt;
espejo (espejo (N a i d))= espejo (N a (espejo d) (espejo i)) por def&lt;br /&gt;
espejo (N a (espejo d)(espejo i)) = N a (espejo (espejo i))&lt;br /&gt;
                                                        (espejo(espejo&lt;br /&gt;
                                                                d)) por def&lt;br /&gt;
&lt;br /&gt;
como i, d son arboles por hipótesis de induccion&lt;br /&gt;
&lt;br /&gt;
= N a (espejo (espejo i)) (espejo (espejo d))&lt;br /&gt;
= N a i d&lt;br /&gt;
&lt;br /&gt;
Luego espejo (espejo (N a i d)) = N a i d.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
Emilio Martinez &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la funciÃ³n&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del Ã¡rbol x; es decir, primero visita la raÃ­z del Ã¡rbol, a&lt;br /&gt;
-- continuaciÃ³n recorre el subÃ¡rbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subÃ¡rbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden Hoja = []&lt;br /&gt;
preorden (Nodo a i d)= [a]++(preorden i)++(preorden d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la funciÃ³n&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del Ã¡rbol x; es decir, primero recorre el subÃ¡rbol&lt;br /&gt;
-- izquierdo, a continuaciÃ³n el subÃ¡rbol derecho y, finalmente, la raÃ­z&lt;br /&gt;
-- del Ã¡rbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden Hoja = []&lt;br /&gt;
postorden (Nodo a i d)= postorden i ++ [a]++ postorden d&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo Ã¡rbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (postorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido x = (postorden . espejo) x == (reverse . postorden) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
--quickCheck prop_recorrido&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez Rivero&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos Hoja = 0&lt;br /&gt;
nNodos (Nodo _ i d)= 1+(nNodos i)+(nNodos d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el nÃºmero de nodos de la&lt;br /&gt;
-- imagen especular de un Ã¡rbol es el mismo que el nÃºmero de nodos del&lt;br /&gt;
-- Ã¡rbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo x = nNodos x == (nNodos . espejo) x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobaciÃ³n es&lt;br /&gt;
&lt;br /&gt;
--  quickCheck prop_nNodos_espejo&lt;br /&gt;
-- +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad Hoja = 0&lt;br /&gt;
profundidad (Nodo _ i d) = 1+ max(profundidad i) (profundidad d)&lt;br /&gt;
&lt;br /&gt;
--Emilio Martinez&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=24</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=24"/>
		<updated>2015-02-09T16:38:54Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia xs ys = length (distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
Definimos la función auxiliar:&lt;br /&gt;
&lt;br /&gt;
distanciaAux :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [Int]&lt;br /&gt;
distanciaAux xs [] = []&lt;br /&gt;
distanciaAux [] ys = []&lt;br /&gt;
distanciaAux (x:xs) (y:ys) | x == y =distanciaAux xs ys&lt;br /&gt;
                           | otherwise =[1]++(distanciaAux xs ys)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = [1]++[product [1..n] | n &amp;lt;-[1..]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=23</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=23"/>
		<updated>2015-02-09T16:27:26Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC xs = [x^2 | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=22</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=22"/>
		<updated>2015-02-09T16:26:06Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR [] = []&lt;br /&gt;
cuadradosR (x:xs) = (x^2):(cuadradosR xs)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC xs = [x | x &amp;lt;- xs, odd x]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR [] = []&lt;br /&gt;
imparesR (x:xs) | odd x = x:(imparesR xs)&lt;br /&gt;
                | otherwise = imparesR xs&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos xs = [x+y | (x,y) &amp;lt;- zip xs (tail xs)]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=21</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=21"/>
		<updated>2015-02-09T16:16:09Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos n = [x | x &amp;lt;- [1..n], esPerfecto x]&lt;br /&gt;
&lt;br /&gt;
Definimos las funciones auxiliares:&lt;br /&gt;
&lt;br /&gt;
factores :: Int -&amp;gt; [Int]&lt;br /&gt;
factores n = [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;br /&gt;
&lt;br /&gt;
esPerfecto :: Int -&amp;gt; Bool&lt;br /&gt;
esPerfecto n = sum (factores n) == 2*n&lt;br /&gt;
&lt;br /&gt;
También podríamos definirla como:&lt;br /&gt;
&lt;br /&gt;
perfectos2 :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos2 n = filter (esPerfecto) [1..n]&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que ambas definiciones son equivalentes:&lt;br /&gt;
&lt;br /&gt;
prop_perfectos n = perfectos n == perfectos2 n&lt;br /&gt;
&lt;br /&gt;
Si queremos podemos comparar ambos algoritmos:&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(1.44 secs, 15935120 bytes)&lt;br /&gt;
&lt;br /&gt;
*Main&amp;gt; perfectos2 500&lt;br /&gt;
[6,28,496]&lt;br /&gt;
(0.22 secs, 14803544 bytes)&lt;br /&gt;
&lt;br /&gt;
Es decir, el segundo es más eficiente.&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=20</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=20"/>
		<updated>2015-02-09T16:03:23Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados n = sum [x^2 | x &amp;lt;- [1..n]]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas n = [(x,y,z) | x &amp;lt;- [1..n], y &amp;lt;- [1..n], z &amp;lt;- [1..n], x^2+y^2 == z^2]&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=19</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=19"/>
		<updated>2015-02-09T15:57:59Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 True True = False&lt;br /&gt;
xor_1 True False = True&lt;br /&gt;
xor_1 False True = True&lt;br /&gt;
xor_1 False False = False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 True x = if x then False else True&lt;br /&gt;
xor_2 False x = if x then True else False&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 x y = (x &amp;amp;&amp;amp; (not y)) || ((not x) &amp;amp;&amp;amp; y)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 x y = x /= y&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=18</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LMF2015/index.php?title=Relaci%C3%B3n_1&amp;diff=18"/>
		<updated>2015-02-09T15:52:09Z</updated>

		<summary type="html">&lt;p&gt;Pabgermen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang = &amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- LMF 2014-15: Rel_1.hs (9 de Febrero de 2015)&lt;br /&gt;
-- Introducción a la programación con Haskell.&lt;br /&gt;
-- Departamento de Ciencias de la Computación e I.A.&lt;br /&gt;
-- Universidad de Sevilla&lt;br /&gt;
-- =====================================================================&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Introducción                                                       --&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- En esta relación de ejercicios hacemos una introducción a Haskell, en&lt;br /&gt;
-- la que se recuerdan:&lt;br /&gt;
-- * las definiciones elementales de funciones,&lt;br /&gt;
-- * las definiciones de funciones por comprensión,&lt;br /&gt;
-- * las definiciones de funciones por recursión y&lt;br /&gt;
-- * los tipos de datos.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Importación de librerías auxiliares                                  &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
import Control.Monad&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es&lt;br /&gt;
-- la media aritmética de los números x, y y z. Por ejemplo, &lt;br /&gt;
--    media3 1 3 8     ==  4.0&lt;br /&gt;
--    media3 (-1) 0 7  ==  2.0&lt;br /&gt;
--    media3 (-3) 0 3  ==  0.0&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
media3 x y z = (x+y+z)/3&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función ultimaCifra tal que (ultimaCifra x)&lt;br /&gt;
-- es la última cifra del nímero x. Por ejemplo,&lt;br /&gt;
--    ultimaCifra 325  ==  5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
ultimaCifra x = rem x 10&lt;br /&gt;
&lt;br /&gt;
Miriam R.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Definir la función rota tal que (rota n xs) es la lista&lt;br /&gt;
-- obtenida poniendo los n primeros elementos de xs al final de la&lt;br /&gt;
-- lista. Por ejemplo, &lt;br /&gt;
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]&lt;br /&gt;
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]&lt;br /&gt;
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
rota n xs= (drop n xs) ++ (take n xs)&lt;br /&gt;
&lt;br /&gt;
Pablo José Gerlach Mena &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. La disyunción excluyente xor de dos fórmulas se&lt;br /&gt;
-- verifica si una es verdadera y la otra es falsa.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función xor_1 que calcule la disyunción excluyente a&lt;br /&gt;
-- partir de la tabla de verdad. Usar 4 ecuaciones, una por cada línea&lt;br /&gt;
-- de la tabla. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_1 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Definir la función xor_2 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la tabla de verdad y patrones. Usar 2&lt;br /&gt;
-- ecuaciones, una por cada valor del primer argumento.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_2 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.3. Definir la función xor_3 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de la disyunción (||), conjunción (&amp;amp;&amp;amp;) y negación&lt;br /&gt;
-- (not). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_3 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.4. Definir la función xor_4 que calcule la disyunción&lt;br /&gt;
-- excluyente a partir de desigualdad (/=). Usar 1 ecuación.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
xor_4 :: Bool -&amp;gt; Bool -&amp;gt; Bool&lt;br /&gt;
xor_4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 5. Definir, por comprensión, la función&lt;br /&gt;
--    sumaDeCuadrados :: Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los&lt;br /&gt;
-- primeros n números; es decir, 1^2 + 2^2 + ... + 100^2. Por ejemplo,&lt;br /&gt;
--    sumaDeCuadrados 3    ==  14&lt;br /&gt;
--    sumaDeCuadrados 100  ==  338350&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaDeCuadrados = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 6. Una terna (x,y,z) de enteros positivos es pitagórica si &lt;br /&gt;
-- x^2 + y^2 = z^2. Usando una lista por comprensión, definir la función&lt;br /&gt;
--    pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
-- tal que (pitagoricas n) es la lista de todas las ternas pitagóricas&lt;br /&gt;
-- cuyas componentes están entre 1 y n. Por ejemplo, &lt;br /&gt;
--    *Main&amp;gt; pitagoricas 10 &lt;br /&gt;
--    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
pitagoricas :: Int -&amp;gt; [(Int, Int, Int)]&lt;br /&gt;
pitagoricas = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 7. Un entero positivo es perfecto si es igual a la suma de&lt;br /&gt;
-- sus factores, excluyendo el propio número. Usando una lista por&lt;br /&gt;
-- comprensión y la función factores (del tema), definir la función &lt;br /&gt;
--    perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
-- tal que (perfectos n) es la lista de todos los números perfectos&lt;br /&gt;
-- menores que n. Por ejemplo: &lt;br /&gt;
--    *Main&amp;gt; perfectos 500&lt;br /&gt;
--    [6,28,496]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
perfectos :: Int -&amp;gt; [Int]&lt;br /&gt;
perfectos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.1. Definir, por comprensión, la función&lt;br /&gt;
--    cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosC xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosC [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosC = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 8.2. Definir, por recursión, la función&lt;br /&gt;
--    cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (cuadradosR xs) es la lista de los cuadrados de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    cuadradosR [1,2,3]  ==  [1,4,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cuadradosR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
cuadradosR = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.1. Definir, por comprensión, la función&lt;br /&gt;
--    imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesC xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesC [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesC :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesC = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 9.2. Definir, por recursión, la función&lt;br /&gt;
--    imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
-- tal que (imparesR xs) es la lista de los números impares de xs. Por&lt;br /&gt;
-- ejemplo, &lt;br /&gt;
--    imparesR [1,2,3]  ==  [1,3]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
imparesR :: [Integer] -&amp;gt; [Integer]&lt;br /&gt;
imparesR = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 10. Definir, por comprensión, la función&lt;br /&gt;
--    sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
-- tal que (sumaConsecutivos xs) es la suma de los pares de elementos&lt;br /&gt;
-- consecutivos de la lista xs. Por ejemplo,&lt;br /&gt;
--    sumaConsecutivos [3,1,5,2]  ==  [4,6,7]&lt;br /&gt;
--    sumaConsecutivos [3]        ==  []&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sumaConsecutivos :: [Int] -&amp;gt; [Int]&lt;br /&gt;
sumaConsecutivos = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 11.  La distancia de Hamming entre dos listas es el número&lt;br /&gt;
-- de posiciones en que los correspondientes elementos son&lt;br /&gt;
-- distintos. Por ejemplo, la distancia de Hamming entre &amp;quot;roma&amp;quot; y &amp;quot;loba&amp;quot; &lt;br /&gt;
-- es 2 (porque hay 2 posiciones en las que los elementos&lt;br /&gt;
-- correspondientes son distintos: la 1ª y la 3ª). &lt;br /&gt;
--    &lt;br /&gt;
-- Definir la función distancia tal que (distancia xs ys) es la &lt;br /&gt;
-- distancia de Hamming entre xs e ys. Por ejemplo,&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;comino&amp;quot;  ==  2&lt;br /&gt;
--    distancia &amp;quot;roma&amp;quot;   &amp;quot;camino&amp;quot;  ==  3&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;ron&amp;quot;     ==  1&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;cama&amp;quot;    ==  2&lt;br /&gt;
--    distancia &amp;quot;romano&amp;quot; &amp;quot;rama&amp;quot;    ==  1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
distancia :: Eq a =&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Int&lt;br /&gt;
distancia = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 12. Definir la función&lt;br /&gt;
--    factoriales :: [Integer]&lt;br /&gt;
-- tal que factoriales es la lista de los factoriales. Por ejemplo,&lt;br /&gt;
--    take 10 factoriales  ==  [1,1,2,6,24,120,720,5040,40320,362880]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Por comprensión:&lt;br /&gt;
&lt;br /&gt;
factoriales1 :: [Integer]&lt;br /&gt;
factoriales1 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando zipWith:&lt;br /&gt;
&lt;br /&gt;
factoriales2 :: [Integer]&lt;br /&gt;
factoriales2 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Por recursión:&lt;br /&gt;
&lt;br /&gt;
factoriales3 :: [Integer]&lt;br /&gt;
factoriales3 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando scanl1:&lt;br /&gt;
&lt;br /&gt;
factoriales4 :: [Integer]&lt;br /&gt;
factoriales4 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Usando iterate:&lt;br /&gt;
&lt;br /&gt;
factoriales5 :: [Integer]&lt;br /&gt;
factoriales5 = undefined&lt;br /&gt;
&lt;br /&gt;
-- Comparación de los tiempos de evaluación:&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.0. En los siguientes ejercicios se demostrarán&lt;br /&gt;
-- propiedades de los árboles binarios definidos como sigue&lt;br /&gt;
--    data Arbol a = Hoja &lt;br /&gt;
--                 | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
--                 deriving (Show, Eq)&lt;br /&gt;
-- Como ejemplos se usarán los árboles&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
data Arbol a = Hoja &lt;br /&gt;
             | Nodo a (Arbol a) (Arbol a)&lt;br /&gt;
             deriving (Show, Eq)&lt;br /&gt;
 &lt;br /&gt;
arbol_1 = Nodo 9&lt;br /&gt;
               (Nodo 3 &lt;br /&gt;
                     (Nodo 2 Hoja Hoja) &lt;br /&gt;
                     (Nodo 4 Hoja Hoja)) &lt;br /&gt;
               (Nodo 7 Hoja Hoja)&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.1. Definir la función&lt;br /&gt;
--    espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
-- tal que (espejo x) es la imagen especular del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; espejo arbol_1&lt;br /&gt;
--    Nodo 9 &lt;br /&gt;
--         (Nodo 7 Hoja Hoja) &lt;br /&gt;
--         (Nodo 3 &lt;br /&gt;
--               (Nodo 4 Hoja Hoja) &lt;br /&gt;
--               (Nodo 2 Hoja Hoja))&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
espejo :: Arbol a -&amp;gt; Arbol a&lt;br /&gt;
espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.2. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
prop_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.3. Demostrar por inducción que para todo árbol x,&lt;br /&gt;
--    espejo (espejo x) = x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x&lt;br /&gt;
 &lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
 -- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.4. Definir la función&lt;br /&gt;
--    preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (preorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- preorden del árbol x; es decir, primero visita la raíz del árbol, a&lt;br /&gt;
-- continuación recorre el subárbol izquierdo y, finalmente, recorre el&lt;br /&gt;
-- subárbol derecho. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; preorden arbol_1&lt;br /&gt;
--    [9,3,2,4,7]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
preorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
preorden = undefined&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.5. Definir la función&lt;br /&gt;
--    postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
-- tal que (postorden x) es la lista correspondiente al recorrido&lt;br /&gt;
-- postorden del árbol x; es decir, primero recorre el subárbol&lt;br /&gt;
-- izquierdo, a continuación el subárbol derecho y, finalmente, la raíz&lt;br /&gt;
-- del árbol. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; postorden arbol_1&lt;br /&gt;
--    [2,4,3,7,9]&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
postorden :: Arbol a -&amp;gt; [a]&lt;br /&gt;
postorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.6. Comprobar con QuickCheck que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_recorrido :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_recorrido = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.7. Demstrar por inducción que para todo árbol x,&lt;br /&gt;
--    postorden (espejo x) = reverse (preorden x)&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración por inducción en x.&lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.8. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = postorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_reverse_preorden_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_reverse_preorden_espejo x =&lt;br /&gt;
   reverse (preorden (espejo x)) == postorden x&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    *Main&amp;gt; quickCheck prop_reverse_preorden_espejo&lt;br /&gt;
--    OK, passed 100 tests.&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.9. Demostrar que para todo árbol binario x, se tiene que&lt;br /&gt;
--    reverse (preorden (espejo x)) = preorden x&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración:&lt;br /&gt;
    reverse (preorden (espejo x))&lt;br /&gt;
    = postorden (espejo (espejo x))    [por ejercicio 13.7]&lt;br /&gt;
    = postorden x                      [por ejercicio 13.3]&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.10. Definir la función&lt;br /&gt;
--    nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (nNodos x) es el número de nodos del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; nNodos arbol_1&lt;br /&gt;
--    5&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
nNodos :: Arbol a -&amp;gt; Int&lt;br /&gt;
nNodos = undefined&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.11. Comprobar con QuickCheck que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodos_espejo :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodos_espejo = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.12. Demostrar por inducción que el número de nodos de la&lt;br /&gt;
-- imagen especular de un árbol es el mismo que el número de nodos del&lt;br /&gt;
-- árbol. &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.13. Comprobar con QuickCheck que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_length_preorden :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_length_preorden = undefined&lt;br /&gt;
 &lt;br /&gt;
-- La comprobación es&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.14. Demostrar por inducción que la longitud de la lista&lt;br /&gt;
-- obtenida recorriendo un árbol en sentido preorden es igual al número&lt;br /&gt;
-- de nodos del árbol.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
{-&lt;br /&gt;
 Demostración: &lt;br /&gt;
&lt;br /&gt;
-}&lt;br /&gt;
 &lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.15. Definir la función&lt;br /&gt;
--    profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
-- tal que (profundidad x) es la profundidad del árbol x. Por ejemplo,&lt;br /&gt;
--    *Main&amp;gt; arbol_1&lt;br /&gt;
--    Nodo 9 (Nodo 3 (Nodo 2 Hoja Hoja) (Nodo 4 Hoja Hoja)) (Nodo 7 Hoja Hoja)&lt;br /&gt;
--    *Main&amp;gt; profundidad arbol_1&lt;br /&gt;
--    3&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
profundidad :: Arbol a -&amp;gt; Int&lt;br /&gt;
profundidad = undefined &lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 13.16. Comprobar con QuickCheck que para todo árbol binario&lt;br /&gt;
-- x, se tiene que&lt;br /&gt;
--    nNodos x &amp;lt;= 2^(profundidad x) - 1&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
-- La propiedad es&lt;br /&gt;
prop_nNodosProfundidad :: Arbol Int -&amp;gt; Bool&lt;br /&gt;
prop_nNodosProfundidad = undefined&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Nota. Para comprobar propiedades de árboles con QuickCheck se&lt;br /&gt;
-- utilizará el siguiente generador.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instance Arbitrary a =&amp;gt; Arbitrary (Arbol a) where&lt;br /&gt;
  arbitrary = sized arbol&lt;br /&gt;
    where&lt;br /&gt;
      arbol 0       = return Hoja &lt;br /&gt;
      arbol n | n&amp;gt;0 = oneof [return Hoja,&lt;br /&gt;
                             liftM3 Nodo arbitrary subarbol subarbol]&lt;br /&gt;
                      where subarbol = arbol (div n 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pabgermen</name></author>
		
	</entry>
</feed>