<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/RA2018/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alikan</id>
	<title>Razonamiento automático (2018-19) - Contribuciones del usuario [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/RA2018/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alikan"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php/Especial:Contribuciones/Alikan"/>
	<updated>2026-07-17T11:34:48Z</updated>
	<subtitle>Contribuciones del usuario</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_7&amp;diff=430</id>
		<title>Relación 7</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_7&amp;diff=430"/>
		<updated>2019-03-04T11:24:53Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R6: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Deduccion_natural_proposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
 &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu raffergon2 chrgencar&lt;br /&gt;
   gleherlop giafus1 marfruman1 enrparalv pabbergue antramhur alikan&lt;br /&gt;
   juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_1_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule mp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2&lt;br /&gt;
   chrgencar giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_2_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2&lt;br /&gt;
   chrgencar giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_3_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` by (rule mp)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu chrgencar raffergon2&lt;br /&gt;
   gleherlop giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp) &lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_4_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 gleherlop marfruman1 alfmarcua&lt;br /&gt;
   enrparalv chrgencar pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 juacanrod cammonagu  *)&lt;br /&gt;
lemma ejercicio_5_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `q` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_5_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  }&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
   marfruman1 alfmarcua enrparalv pabbergue  antramhur alikan juacanrod&lt;br /&gt;
   hugrubsan *) &lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma ejercicio_6_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    moreover from `p ⟶ q` `p` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 gleherlop&lt;br /&gt;
   marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu juacanrod chrgencar *)&lt;br /&gt;
lemma ejercicio_7_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p&amp;quot; using `p` .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_7_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  using assms by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 marfruman1&lt;br /&gt;
   enrparalv pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu gleherlop chrgencar juacanrod alfmarcua *)&lt;br /&gt;
lemma ejercicio_8_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using ejercicio_7_1 by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 marfruman1 alfmarcua enrparalv&lt;br /&gt;
   gleherlop antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_9_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop alfmarcua&lt;br /&gt;
   enrparalv pabbergue antramhur alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      have 6: &amp;quot;r ⟶ s&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;s&amp;quot; using 6 2 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar giafus1 *)&lt;br /&gt;
lemma ejercicio_10_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p ⟶ (q ⟶ (r ⟶ s))`&lt;br /&gt;
        have &amp;quot;q ⟶ (r ⟶ s)&amp;quot; by (rule mp)&lt;br /&gt;
      hence &amp;quot;r ⟶ s&amp;quot; using `q` by (rule mp)&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r` by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 gleherlop cammonagu giafus1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot; using 1 ejercicio_6 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 enrparalv antramhur *)&lt;br /&gt;
lemma ejercicio_11_2:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_11_1:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume p&lt;br /&gt;
      with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
      moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
      ultimately show r by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop enrparalv&lt;br /&gt;
   pabbergue antramhur alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 by this&lt;br /&gt;
    qed&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber  josgomrom4 cammonagu giafus1 alfmarcua chrgencar *)&lt;br /&gt;
lemma ejercicio_12_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
    with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(1, 2) by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   enrparalv chrgencar gleherlop pabbergue antramhur juacanrod hugrubsan  &lt;br /&gt;
   alikan *)&lt;br /&gt;
lemma ejercicio_13_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  using assms by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  josgomrom4 *)&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu raffergon2 marfruman1 alfmarcua enrparalv&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur hugrubsan juacanrod alikan *) &lt;br /&gt;
lemma ejercicio_14_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim juacanrod josgomrom4 *)&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar&lt;br /&gt;
   pabbergue antramhur gleherlop hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_15_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammmonagu enrparalv chrgencar gleherlop pabbergue antramhur&lt;br /&gt;
   hugrubsan alikan juacanrod cammonagu *)  &lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_16_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof - (* TODO? *)&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
  moreover have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;(p ∧ q) ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan&lt;br /&gt;
   juacanrod alikan *)  &lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 6: &amp;quot;q ∧ r&amp;quot; using 5 2 by (rule conjI)&lt;br /&gt;
  show ?thesis using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_17_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∧ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof (rule conjI)&lt;br /&gt;
    show &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show ?thesis by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 juacanrod alikan *)&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu alfmarcua chrgencar pabbergue&lt;br /&gt;
   gleherlop antramhur enrparalv hugrubsan *) &lt;br /&gt;
lemma ejercicio_18_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_19_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    have &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;r&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_20_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar pabbergue gleherlop antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_21_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
  moreover from `p ∧ q` have &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_22_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    with `p ∧ q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_23_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
  with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan juacanrod&lt;br /&gt;
   cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_24_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show r by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu raffergon2 marfruman1&lt;br /&gt;
   alfmarcua chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_27_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms .&lt;br /&gt;
  moreover have &amp;quot;p ⟹ q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar&lt;br /&gt;
   gleherlop alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot; show &amp;quot;p ∨ r&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: p thus &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q have r using 1 4 by (rule mp)&lt;br /&gt;
    thus &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_28_1:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjI2)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show &amp;quot;p ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon juacanrod marfruman1 *)&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu josgomrom4 raffergon2 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_29_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule disjE)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 marfruman1&lt;br /&gt;
   chrgencar alfmarcua pabbergue gleherlop antramhur enrparalv hugrubsan&lt;br /&gt;
   juacanrod cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue&lt;br /&gt;
   gleherlop antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot; (is &amp;quot;?R&amp;quot;)&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus ?R by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q ∨ r&amp;quot; thus ?R&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;q&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;r&amp;quot; thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_31_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot; thus ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume q hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume r hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_32_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar gleherlop&lt;br /&gt;
   alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: p using 1 by (rule conjunct1)&lt;br /&gt;
  show ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: q have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: r have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;q ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_33_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence q by (rule conjunct2)&lt;br /&gt;
  hence 3: &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have p using 2 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 3 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 4: &amp;quot;p ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 5: &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have p using 4 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_34_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `p ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: p hence 2: &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
  thus ?thesis using 2 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 4: &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have q using 3 by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis using 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_35_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    moreover have &amp;quot;p ∨ r&amp;quot; using `p` by (rule disjI1)&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show ?thesis using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q show ?thesis using 3&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
    next&lt;br /&gt;
      assume 5: r have &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
      thus ?thesis by (rule disjI2)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_36_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      with `q` have &amp;quot;q ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  have 2: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot; show &amp;quot;r&amp;quot; using 4&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 5: &amp;quot;p&amp;quot; show &amp;quot;r&amp;quot; using 2 5 by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: &amp;quot;q&amp;quot; show &amp;quot;r&amp;quot; using 3 6 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_37_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot; hence 1: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume q hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show r using assms(1) 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_38_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 gleherlop&lt;br /&gt;
   marfruman1 chrgencar alfmarcua pabbergue enrparalv juacanrod&lt;br /&gt;
   hugrubsan cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue&lt;br /&gt;
   gleherlop juacanrod enrparalv hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: p show q using 1 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_40_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with `¬p` show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;¬q&amp;quot; show &amp;quot;¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_41_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with `p ⟶ q` show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot; show &amp;quot;p&amp;quot; using assms(2) 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_42_1:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `¬q` have &amp;quot;p&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot; show &amp;quot;q&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot; thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_43_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `¬p` have &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q&amp;quot; .&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim gleherlop josgomrom4 marfruman1 pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;¬p ∧ ¬q&amp;quot; hence 2: &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using assms(1) proof (rule disjE)&lt;br /&gt;
    assume 4: &amp;quot;p&amp;quot; show ?thesis using 2 4 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 5: &amp;quot;q&amp;quot; show ?thesis using 3 5 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_44_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬q&amp;quot; by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬p ∨ ¬q&amp;quot; have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_45_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show False by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume p hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 2 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume q hence 3: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammmonagu *)&lt;br /&gt;
lemma ejercicio_46_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_46_2:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  have &amp;quot;p ⟹ p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  then have &amp;quot;p ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ p&amp;quot; using assms by (rule mt)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ⟹ p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  then have &amp;quot;q ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ q&amp;quot; using assms by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbregue juacanrod&lt;br /&gt;
   hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 4 proof (rule disjE)&lt;br /&gt;
    assume 5: p show ?thesis using 2 5 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: q show ?thesis using 3 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber gleherlop cammonagu*)&lt;br /&gt;
lemma ejercicio_47_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∧ ¬q)&amp;quot; by (rule ejercicio_44_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_47_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have &amp;quot;¬ p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬ q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `¬ p` by (rule ejercicio_43)&lt;br /&gt;
  show False using `¬ q` `q` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbergue juacanrod&lt;br /&gt;
   hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence 3: p by (rule conjunct1)&lt;br /&gt;
  have 4: q using 2 by (rule conjunct2)&lt;br /&gt;
  show False&lt;br /&gt;
  using 1 proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop cammonagu *)&lt;br /&gt;
lemma ejercicio_48_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∨ ¬q)&amp;quot; by (rule ejercicio_45_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcu gleherlop&lt;br /&gt;
   hugrubsan juacanrod cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;p ∧ ¬p&amp;quot; hence 2: p by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_49_1:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv pabbergue juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof (rule notE)&lt;br /&gt;
  show p using 1 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_50_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using `p ∧ ¬p` by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber raffergon2 josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv pabbergue juacanrod hugrubsan cammmonagu alikan *) &lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotD)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 juacanrod pabbergue alikan enrparalv *)&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(p ∨ ¬p)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; proof (rule notI)&lt;br /&gt;
    assume p hence 3: &amp;quot;p ∨ ¬p&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 4: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_52_1:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬¬p&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬p&amp;quot; using `¬p ∧ ¬¬p` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_52_2:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬ p ∧ ¬¬ p&amp;quot; by (rule ejercicio_46)&lt;br /&gt;
  then show False by (rule ejercicio_50)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   juacanrod pabbergue enrparalv *) &lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show p proof (rule ccontr)&lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 5: p show q using 2 5 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    show False using 3 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_53_1:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬ p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;p&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue enrparalv *) &lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; hence 3: &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua  cammonagu *)&lt;br /&gt;
lemma ejercicio_54_1:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume 6: &amp;quot;¬q&amp;quot; have 7: &amp;quot;¬p ∧ ¬q&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
      show False using 1 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    have 8: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    show False using 2 8 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 9: &amp;quot;p ∨ q&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
  show False using 2 9 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua josgomrom4 manperjim pabbergue juacanrod cammonagu enrparalv *)&lt;br /&gt;
lemma ejercicio_55_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬q&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue enrparalv *) &lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show 3: p&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show 5: q&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; hence 6: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_56_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using `¬¬p ∧ ¬¬q` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue enrparalv *) &lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  show False using 1&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show 3: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    proof (rule conjI)&lt;br /&gt;
      show p&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show q&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬q&amp;quot; hence 5: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
        show False using 2 5 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_57_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;p ∧ q&amp;quot; by (rule ejercicio_56_1)&lt;br /&gt;
  with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 marfruman1 juacanrod pabbergue enrparalv *)&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬((p ⟶ q) ∨ ¬(p ⟶ q))&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬(p ⟶ q)&amp;quot; proof (rule notI)&lt;br /&gt;
      assume &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
      hence 3: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI1)&lt;br /&gt;
      show False using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    hence 4: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot; thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 1: &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    have &amp;quot;q ⟶ p&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 2: q&lt;br /&gt;
      have 3: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
        assume p show q using 2 .&lt;br /&gt;
      qed&lt;br /&gt;
      show p using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop *)&lt;br /&gt;
lemma ejercicio_58_2:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;(p ∧ ¬q) ∧ (q ∧ ¬p)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;p ∧ ¬q&amp;quot; ..&lt;br /&gt;
  hence 2: p ..&lt;br /&gt;
  have &amp;quot;q ∧ ¬p&amp;quot; using 1 ..&lt;br /&gt;
  hence 3: &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_58_1:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ ((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;¬(p ⟶ q) ∧ ¬(q ⟶ p)&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(p ⟶ q)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `p ⟶ q` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_58_3:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;p ∨ ¬ p&amp;quot; by (rule ejercicio_52)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40)&lt;br /&gt;
  then show ?thesis by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then have &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7)&lt;br /&gt;
  then show ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=429</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=429"/>
		<updated>2019-03-04T11:23:31Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R6: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Deduccion_natural_proposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
 &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu raffergon2 chrgencar&lt;br /&gt;
   gleherlop giafus1 marfruman1 enrparalv pabbergue antramhur alikan&lt;br /&gt;
   juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_1_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule mp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2&lt;br /&gt;
   chrgencar giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_2_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2&lt;br /&gt;
   chrgencar giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_3_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` by (rule mp)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu chrgencar raffergon2&lt;br /&gt;
   gleherlop giafus1 marfruman1 alfmarcua enrparalv pabbergue antramhur&lt;br /&gt;
   alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp) &lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_4_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 gleherlop marfruman1 alfmarcua&lt;br /&gt;
   enrparalv chrgencar pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 juacanrod cammonagu  *)&lt;br /&gt;
lemma ejercicio_5_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `q` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_5_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  }&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
   marfruman1 alfmarcua enrparalv pabbergue  antramhur alikan juacanrod&lt;br /&gt;
   hugrubsan *) &lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma ejercicio_6_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    moreover from `p ⟶ q` `p` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 gleherlop&lt;br /&gt;
   marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu juacanrod chrgencar *)&lt;br /&gt;
lemma ejercicio_7_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p&amp;quot; using `p` .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_7_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  using assms by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 marfruman1&lt;br /&gt;
   enrparalv pabbergue antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu gleherlop chrgencar juacanrod alfmarcua *)&lt;br /&gt;
lemma ejercicio_8_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using ejercicio_7_1 by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 marfruman1 alfmarcua enrparalv&lt;br /&gt;
   gleherlop antramhur alikan hugrubsan *) &lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_9_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop alfmarcua&lt;br /&gt;
   enrparalv pabbergue antramhur alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      have 6: &amp;quot;r ⟶ s&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;s&amp;quot; using 6 2 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar giafus1 *)&lt;br /&gt;
lemma ejercicio_10_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p ⟶ (q ⟶ (r ⟶ s))`&lt;br /&gt;
        have &amp;quot;q ⟶ (r ⟶ s)&amp;quot; by (rule mp)&lt;br /&gt;
      hence &amp;quot;r ⟶ s&amp;quot; using `q` by (rule mp)&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r` by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 gleherlop cammonagu giafus1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot; using 1 ejercicio_6 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 enrparalv antramhur *)&lt;br /&gt;
lemma ejercicio_11_2:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_11_1:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume p&lt;br /&gt;
      with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
      moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
      ultimately show r by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop enrparalv&lt;br /&gt;
   pabbergue antramhur alikan juacanrod hugrubsan *) &lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 by this&lt;br /&gt;
    qed&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber  josgomrom4 cammonagu giafus1 alfmarcua chrgencar *)&lt;br /&gt;
lemma ejercicio_12_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
    with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(1, 2) by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   enrparalv chrgencar gleherlop pabbergue antramhur juacanrod hugrubsan  &lt;br /&gt;
   alikan *)&lt;br /&gt;
lemma ejercicio_13_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  using assms by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  josgomrom4 *)&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu raffergon2 marfruman1 alfmarcua enrparalv&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur hugrubsan juacanrod alikan *) &lt;br /&gt;
lemma ejercicio_14_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim juacanrod josgomrom4 *)&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar&lt;br /&gt;
   pabbergue antramhur gleherlop hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_15_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammmonagu enrparalv chrgencar gleherlop pabbergue antramhur&lt;br /&gt;
   hugrubsan alikan juacanrod cammonagu *)  &lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_16_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof - (* TODO? *)&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
  moreover have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;(p ∧ q) ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan&lt;br /&gt;
   juacanrod alikan *)  &lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 6: &amp;quot;q ∧ r&amp;quot; using 5 2 by (rule conjI)&lt;br /&gt;
  show ?thesis using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_17_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∧ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof (rule conjI)&lt;br /&gt;
    show &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show ?thesis by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 juacanrod alikan *)&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu alfmarcua chrgencar pabbergue&lt;br /&gt;
   gleherlop antramhur enrparalv hugrubsan *) &lt;br /&gt;
lemma ejercicio_18_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_19_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    have &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;r&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_20_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   cammonagu chrgencar pabbergue gleherlop antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_21_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
  moreover from `p ∧ q` have &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_22_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    with `p ∧ q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_23_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
  with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan juacanrod&lt;br /&gt;
   cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_24_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show r by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu raffergon2 marfruman1&lt;br /&gt;
   alfmarcua chrgencar gleherlop pabbergue antramhur enrparalv juacanrod&lt;br /&gt;
   hugrubsan alikan *)  &lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu marfruman1 alfmarcua&lt;br /&gt;
   chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   alikan *)  &lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_27_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms .&lt;br /&gt;
  moreover have &amp;quot;p ⟹ q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar&lt;br /&gt;
   gleherlop alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan&lt;br /&gt;
   cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot; show &amp;quot;p ∨ r&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: p thus &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q have r using 1 4 by (rule mp)&lt;br /&gt;
    thus &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_28_1:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjI2)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show &amp;quot;p ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon juacanrod marfruman1 *)&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu josgomrom4 raffergon2 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_29_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule disjE)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 marfruman1&lt;br /&gt;
   chrgencar alfmarcua pabbergue gleherlop antramhur enrparalv hugrubsan&lt;br /&gt;
   juacanrod cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue&lt;br /&gt;
   gleherlop antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot; (is &amp;quot;?R&amp;quot;)&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus ?R by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q ∨ r&amp;quot; thus ?R&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;q&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;r&amp;quot; thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_31_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot; thus ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume q hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume r hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_32_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar gleherlop&lt;br /&gt;
   alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: p using 1 by (rule conjunct1)&lt;br /&gt;
  show ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: q have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: r have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;q ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_33_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence q by (rule conjunct2)&lt;br /&gt;
  hence 3: &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have p using 2 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 3 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 4: &amp;quot;p ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 5: &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have p using 4 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_34_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `p ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: p hence 2: &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
  thus ?thesis using 2 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 4: &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have q using 3 by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis using 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_35_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    moreover have &amp;quot;p ∨ r&amp;quot; using `p` by (rule disjI1)&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua&lt;br /&gt;
   gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show ?thesis using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q show ?thesis using 3&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
    next&lt;br /&gt;
      assume 5: r have &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
      thus ?thesis by (rule disjI2)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_36_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      with `q` have &amp;quot;q ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  have 2: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot; show &amp;quot;r&amp;quot; using 4&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 5: &amp;quot;p&amp;quot; show &amp;quot;r&amp;quot; using 2 5 by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: &amp;quot;q&amp;quot; show &amp;quot;r&amp;quot; using 3 6 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_37_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   pabbergue antramhur enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot; hence 1: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume q hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show r using assms(1) 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_38_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 gleherlop&lt;br /&gt;
   marfruman1 chrgencar alfmarcua pabbergue enrparalv juacanrod&lt;br /&gt;
   hugrubsan cammonagu alikan *)  &lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue&lt;br /&gt;
   gleherlop juacanrod enrparalv hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: p show q using 1 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_40_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with `¬p` show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;¬q&amp;quot; show &amp;quot;¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_41_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with `p ⟶ q` show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot; show &amp;quot;p&amp;quot; using assms(2) 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_42_1:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `¬q` have &amp;quot;p&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua&lt;br /&gt;
   pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot; show &amp;quot;q&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot; thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_43_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `¬p` have &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q&amp;quot; .&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim gleherlop josgomrom4 marfruman1 pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;¬p ∧ ¬q&amp;quot; hence 2: &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using assms(1) proof (rule disjE)&lt;br /&gt;
    assume 4: &amp;quot;p&amp;quot; show ?thesis using 2 4 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 5: &amp;quot;q&amp;quot; show ?thesis using 3 5 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_44_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬q&amp;quot; by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬p ∨ ¬q&amp;quot; have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_45_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show False by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue&lt;br /&gt;
   juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume p hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 2 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume q hence 3: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammmonagu *)&lt;br /&gt;
lemma ejercicio_46_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_46_2:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  have &amp;quot;p ⟹ p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  then have &amp;quot;p ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ p&amp;quot; using assms by (rule mt)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ⟹ p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  then have &amp;quot;q ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ q&amp;quot; using assms by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbregue juacanrod&lt;br /&gt;
   hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 4 proof (rule disjE)&lt;br /&gt;
    assume 5: p show ?thesis using 2 5 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: q show ?thesis using 3 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber gleherlop cammonagu*)&lt;br /&gt;
lemma ejercicio_47_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∧ ¬q)&amp;quot; by (rule ejercicio_44_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_47_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have &amp;quot;¬ p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬ q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `¬ p` by (rule ejercicio_43)&lt;br /&gt;
  show False using `¬ q` `q` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbergue juacanrod&lt;br /&gt;
   hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence 3: p by (rule conjunct1)&lt;br /&gt;
  have 4: q using 2 by (rule conjunct2)&lt;br /&gt;
  show False&lt;br /&gt;
  using 1 proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop cammonagu *)&lt;br /&gt;
lemma ejercicio_48_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∨ ¬q)&amp;quot; by (rule ejercicio_45_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcu gleherlop&lt;br /&gt;
   hugrubsan juacanrod cammonagu alikan *) &lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;p ∧ ¬p&amp;quot; hence 2: p by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_49_1:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv pabbergue juacanrod hugrubsan alikan *) &lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof (rule notE)&lt;br /&gt;
  show p using 1 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_50_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using `p ∧ ¬p` by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber raffergon2 josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv pabbergue juacanrod hugrubsan cammmonagu alikan *) &lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotD)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 juacanrod pabbergue alikan *)&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(p ∨ ¬p)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; proof (rule notI)&lt;br /&gt;
    assume p hence 3: &amp;quot;p ∨ ¬p&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 4: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_52_1:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬¬p&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬p&amp;quot; using `¬p ∧ ¬¬p` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_52_2:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬ p ∧ ¬¬ p&amp;quot; by (rule ejercicio_46)&lt;br /&gt;
  then show False by (rule ejercicio_50)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop&lt;br /&gt;
   juacanrod pabbergue alikan *) &lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show p proof (rule ccontr)&lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 5: p show q using 2 5 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    show False using 3 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_53_1:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬ p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;p&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue alikan *) &lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; hence 3: &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua  cammonagu *)&lt;br /&gt;
lemma ejercicio_54_1:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume 6: &amp;quot;¬q&amp;quot; have 7: &amp;quot;¬p ∧ ¬q&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
      show False using 1 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    have 8: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    show False using 2 8 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 9: &amp;quot;p ∨ q&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
  show False using 2 9 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua josgomrom4 manperjim pabbergue juacanrod cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_55_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬q&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue alikan *) &lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show 3: p&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show 5: q&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; hence 6: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_56_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using `¬¬p ∧ ¬¬q` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod&lt;br /&gt;
   pabbergue alikan *) &lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  show False using 1&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show 3: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    proof (rule conjI)&lt;br /&gt;
      show p&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show q&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬q&amp;quot; hence 5: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
        show False using 2 5 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_57_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;p ∧ q&amp;quot; by (rule ejercicio_56_1)&lt;br /&gt;
  with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 marfruman1 juacanrod pabbergue alikan *)&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬((p ⟶ q) ∨ ¬(p ⟶ q))&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬(p ⟶ q)&amp;quot; proof (rule notI)&lt;br /&gt;
      assume &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
      hence 3: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI1)&lt;br /&gt;
      show False using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    hence 4: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot; thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 1: &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    have &amp;quot;q ⟶ p&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 2: q&lt;br /&gt;
      have 3: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
        assume p show q using 2 .&lt;br /&gt;
      qed&lt;br /&gt;
      show p using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop *)&lt;br /&gt;
lemma ejercicio_58_2:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;(p ∧ ¬q) ∧ (q ∧ ¬p)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;p ∧ ¬q&amp;quot; ..&lt;br /&gt;
  hence 2: p ..&lt;br /&gt;
  have &amp;quot;q ∧ ¬p&amp;quot; using 1 ..&lt;br /&gt;
  hence 3: &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_58_1:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ ((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;¬(p ⟶ q) ∧ ¬(q ⟶ p)&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(p ⟶ q)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `p ⟶ q` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_58_3:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;p ∨ ¬ p&amp;quot; by (rule ejercicio_52)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40)&lt;br /&gt;
  then show ?thesis by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then have &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7)&lt;br /&gt;
  then show ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=406</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=406"/>
		<updated>2019-02-27T10:28:05Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R6: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Deduccion_natural_proposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
 &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu raffergon2 chrgencar gleherlop giafus1 &lt;br /&gt;
marfruman1 enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_1_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule mp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_2_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_3_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` by (rule mp)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp) &lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_4_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 gleherlop&lt;br /&gt;
marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 juacanrod cammonagu  *)&lt;br /&gt;
lemma ejercicio_5_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `q` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_5_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  }&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue  antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma ejercicio_6_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    moreover from `p ⟶ q` `p` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 gleherlop marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu juacanrod chrgencar *)&lt;br /&gt;
lemma ejercicio_7_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p&amp;quot; using `p` .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_7_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  using assms by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu gleherlop chrgencar juacanrod alfmarcua *)&lt;br /&gt;
lemma ejercicio_8_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using ejercicio_7_1 by (rule impI)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 marfruman1 alfmarcua enrparalv gleherlop antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_9_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop alfmarcua enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      have 6: &amp;quot;r ⟶ s&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;s&amp;quot; using 6 2 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar giafus1 *)&lt;br /&gt;
lemma ejercicio_10_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p ⟶ (q ⟶ (r ⟶ s))`&lt;br /&gt;
        have &amp;quot;q ⟶ (r ⟶ s)&amp;quot; by (rule mp)&lt;br /&gt;
      hence &amp;quot;r ⟶ s&amp;quot; using `q` by (rule mp)&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r` by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 gleherlop cammonagu giafus1 alfmarcua chrgencar pabbergue alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot; using 1 ejercicio_6 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 enrparalv antramhur *)&lt;br /&gt;
lemma ejercicio_11_2:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_11_1:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume p&lt;br /&gt;
      with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
      moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
      ultimately show r by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop enrparalv pabbergue antramhur alikan juacanrod hugrubsan *)&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 by this&lt;br /&gt;
    qed&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber  josgomrom4 cammonagu giafus1 alfmarcua chrgencar *)&lt;br /&gt;
lemma ejercicio_12_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
    with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  *)&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(1, 2) by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar gleherlop pabbergue antramhur juacanrod hugrubsan &lt;br /&gt;
   alikan *)&lt;br /&gt;
lemma ejercicio_13_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  using assms by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  josgomrom4 *)&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue gleherlop antramhur hugrubsan juacanrod alikan *)&lt;br /&gt;
lemma ejercicio_14_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim juacanrod josgomrom4 *)&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur gleherlop hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_15_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammmonagu enrparalv chrgencar gleherlop pabbergue antramhur hugrubsan alikan juacanrod cammonagu*)&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_16_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof - (* TODO? *)&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
  moreover have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;(p ∧ q) ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan juacanrod alikan *)&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 6: &amp;quot;q ∧ r&amp;quot; using 5 2 by (rule conjI)&lt;br /&gt;
  show ?thesis using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_17_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∧ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof (rule conjI)&lt;br /&gt;
    show &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show ?thesis by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 juacanrod alikan*)&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_18_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_19_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    have &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;r&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_20_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_21_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
  moreover from `p ∧ q` have &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_22_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    with `p ∧ q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_23_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
  with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan juacanrod cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_24_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show r by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu raffergon2 marfruman1 alfmarcua chrgencar gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar pabbergue antramhur enrparalv juacanrod hugrubsan cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_27_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms .&lt;br /&gt;
  moreover have &amp;quot;p ⟹ q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot; show &amp;quot;p ∨ r&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: p thus &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q have r using 1 4 by (rule mp)&lt;br /&gt;
    thus &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_28_1:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjI2)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show &amp;quot;p ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon juacanrod marfruman1 *)&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu josgomrom4 raffergon2 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_29_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule disjE)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 marfruman1 chrgencar alfmarcua pabbergue gleherlop antramhur enrparalv hugrubsan juacanrod cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue gleherlop antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot; (is &amp;quot;?R&amp;quot;)&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus ?R by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q ∨ r&amp;quot; thus ?R&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;q&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;r&amp;quot; thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_31_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot; thus ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume q hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume r hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_32_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: p using 1 by (rule conjunct1)&lt;br /&gt;
  show ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: q have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: r have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;q ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_33_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence q by (rule conjunct2)&lt;br /&gt;
  hence 3: &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have p using 2 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 3 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 4: &amp;quot;p ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 5: &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have p using 4 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_34_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `p ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: p hence 2: &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
  thus ?thesis using 2 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 4: &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have q using 3 by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis using 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_35_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    moreover have &amp;quot;p ∨ r&amp;quot; using `p` by (rule disjI1)&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show ?thesis using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q show ?thesis using 3&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
    next&lt;br /&gt;
      assume 5: r have &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
      thus ?thesis by (rule disjI2)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_36_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      with `q` have &amp;quot;q ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  have 2: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot; show &amp;quot;r&amp;quot; using 4&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 5: &amp;quot;p&amp;quot; show &amp;quot;r&amp;quot; using 2 5 by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: &amp;quot;q&amp;quot; show &amp;quot;r&amp;quot; using 3 6 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_37_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot; hence 1: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume q hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show r using assms(1) 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_38_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 gleherlop marfruman1 chrgencar alfmarcua pabbergue enrparalv juacanrod hugrubsan cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue gleherlop juacanrod enrparalv hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: p show q using 1 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_40_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with `¬p` show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;¬q&amp;quot; show &amp;quot;¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_41_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with `p ⟶ q` show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot; show &amp;quot;p&amp;quot; using assms(2) 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_42_1:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `¬q` have &amp;quot;p&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot; show &amp;quot;q&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot; thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_43_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `¬p` have &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q&amp;quot; .&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim gleherlop josgomrom4 marfruman1 pabbergue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;¬p ∧ ¬q&amp;quot; hence 2: &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using assms(1) proof (rule disjE)&lt;br /&gt;
    assume 4: &amp;quot;p&amp;quot; show ?thesis using 2 4 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 5: &amp;quot;q&amp;quot; show ?thesis using 3 5 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_44_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬q&amp;quot; by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬p ∨ ¬q&amp;quot; have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_45_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show False by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume p hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 2 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume q hence 3: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammmonagu *)&lt;br /&gt;
lemma ejercicio_46_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_46_2:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  have &amp;quot;p ⟹ p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  then have &amp;quot;p ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ p&amp;quot; using assms by (rule mt)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ⟹ p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  then have &amp;quot;q ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ q&amp;quot; using assms by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbregue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 4 proof (rule disjE)&lt;br /&gt;
    assume 5: p show ?thesis using 2 5 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: q show ?thesis using 3 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber gleherlop cammonagu*)&lt;br /&gt;
lemma ejercicio_47_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∧ ¬q)&amp;quot; by (rule ejercicio_44_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_47_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have &amp;quot;¬ p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬ q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `¬ p` by (rule ejercicio_43)&lt;br /&gt;
  show False using `¬ q` `q` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbergue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence 3: p by (rule conjunct1)&lt;br /&gt;
  have 4: q using 2 by (rule conjunct2)&lt;br /&gt;
  show False&lt;br /&gt;
  using 1 proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop cammonagu *)&lt;br /&gt;
lemma ejercicio_48_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∨ ¬q)&amp;quot; by (rule ejercicio_45_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcu gleherlop hugrubsan juacanrod cammonagu alikan *)&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;p ∧ ¬p&amp;quot; hence 2: p by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_49_1:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 gleherlop alfmarcua enrparalv pabbergue juacanrod hugrubsan alikan *)&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof (rule notE)&lt;br /&gt;
  show p using 1 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
lemma ejercicio_50_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using `p ∧ ¬p` by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber raffergon2 josgomrom4 marfruman1 gleherlop alfmarcua enrparalv pabbergue juacanrod hugrubsan cammmonagu alikan *)&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotD)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 juacanrod pabbergue alikan *)&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(p ∨ ¬p)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; proof (rule notI)&lt;br /&gt;
    assume p hence 3: &amp;quot;p ∨ ¬p&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 4: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_52_1:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬¬p&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬p&amp;quot; using `¬p ∧ ¬¬p` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_52_2:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬ p ∧ ¬¬ p&amp;quot; by (rule ejercicio_46)&lt;br /&gt;
  then show False by (rule ejercicio_50)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show p proof (rule ccontr)&lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 5: p show q using 2 5 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    show False using 3 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_53_1:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬ p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;p&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; hence 3: &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua  cammonagu *)&lt;br /&gt;
lemma ejercicio_54_1:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume 6: &amp;quot;¬q&amp;quot; have 7: &amp;quot;¬p ∧ ¬q&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
      show False using 1 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    have 8: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    show False using 2 8 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 9: &amp;quot;p ∨ q&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
  show False using 2 9 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua josgomrom4 manperjim pabbergue juacanrod cammonagu *)&lt;br /&gt;
lemma ejercicio_55_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬q&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show 3: p&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show 5: q&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; hence 6: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_56_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using `¬¬p ∧ ¬¬q` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  show False using 1&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show 3: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    proof (rule conjI)&lt;br /&gt;
      show p&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show q&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬q&amp;quot; hence 5: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
        show False using 2 5 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua cammonagu *)&lt;br /&gt;
lemma ejercicio_57_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;p ∧ q&amp;quot; by (rule ejercicio_56_1)&lt;br /&gt;
  with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 marfruman1 juacanrod pabbergue *)&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬((p ⟶ q) ∨ ¬(p ⟶ q))&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬(p ⟶ q)&amp;quot; proof (rule notI)&lt;br /&gt;
      assume &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
      hence 3: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI1)&lt;br /&gt;
      show False using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    hence 4: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot; thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 1: &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    have &amp;quot;q ⟶ p&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 2: q&lt;br /&gt;
      have 3: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
        assume p show q using 2 .&lt;br /&gt;
      qed&lt;br /&gt;
      show p using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop *)&lt;br /&gt;
lemma ejercicio_58_2:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;(p ∧ ¬q) ∧ (q ∧ ¬p)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;p ∧ ¬q&amp;quot; ..&lt;br /&gt;
  hence 2: p ..&lt;br /&gt;
  have &amp;quot;q ∧ ¬p&amp;quot; using 1 ..&lt;br /&gt;
  hence 3: &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_58_1:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ ((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;¬(p ⟶ q) ∧ ¬(q ⟶ p)&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(p ⟶ q)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `p ⟶ q` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_58_3:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;p ∨ ¬ p&amp;quot; by (rule ejercicio_52)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40)&lt;br /&gt;
  then show ?thesis by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then have &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7)&lt;br /&gt;
  then show ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=375</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=375"/>
		<updated>2019-02-14T12:44:37Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R6: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Deduccion_natural_proposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
 &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu raffergon2 chrgencar gleherlop giafus1 &lt;br /&gt;
marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_1_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule mp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_2_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_3_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` by (rule mp)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp) &lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_4_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 gleherlop&lt;br /&gt;
marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu  *)&lt;br /&gt;
lemma ejercicio_5_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `q` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_5_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  }&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue  antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma ejercicio_6_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    moreover from `p ⟶ q` `p` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 gleherlop marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu chrgencar *)&lt;br /&gt;
lemma ejercicio_7_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p&amp;quot; using `p` .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_7_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  using assms by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 marfruman1 enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu gleherlop chrgencar alfmarcua *)&lt;br /&gt;
lemma ejercicio_8_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using ejercicio_7_1 by (rule impI)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 marfruman1 alfmarcua enrparalv gleherlop antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar pabbergue *)&lt;br /&gt;
lemma ejercicio_9_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop alfmarcua enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      have 6: &amp;quot;r ⟶ s&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;s&amp;quot; using 6 2 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar giafus1 *)&lt;br /&gt;
lemma ejercicio_10_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p ⟶ (q ⟶ (r ⟶ s))`&lt;br /&gt;
        have &amp;quot;q ⟶ (r ⟶ s)&amp;quot; by (rule mp)&lt;br /&gt;
      hence &amp;quot;r ⟶ s&amp;quot; using `q` by (rule mp)&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r` by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 gleherlop cammonagu giafus1 alfmarcua chrgencar pabbergue alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot; using 1 ejercicio_6 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 enrparalv antramhur *)&lt;br /&gt;
lemma ejercicio_11_2:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_11_1:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume p&lt;br /&gt;
      with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
      moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
      ultimately show r by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop enrparalv pabbergue antramhur alikan hugrubsan *)&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 by this&lt;br /&gt;
    qed&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber  josgomrom4 cammonagu giafus1 alfmarcua chrgencar *)&lt;br /&gt;
lemma ejercicio_12_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
    with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  *)&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(1, 2) by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar gleherlop pabbergue antramhur hugrubsan &lt;br /&gt;
   alikan*)&lt;br /&gt;
lemma ejercicio_13_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  using assms by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  josgomrom4 *)&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue gleherlop antramhur hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_14_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 *)&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur gleherlop hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_15_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammmonagu enrparalv chrgencar gleherlop pabbergue antramhur hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_16_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof - (* TODO? *)&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
  moreover have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;(p ∧ q) ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 6: &amp;quot;q ∧ r&amp;quot; using 5 2 by (rule conjI)&lt;br /&gt;
  show ?thesis using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_17_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∧ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof (rule conjI)&lt;br /&gt;
    show &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show ?thesis by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alikan*)&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_18_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_19_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    have &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan alikan*)&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;r&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_20_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_21_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
  moreover from `p ∧ q` have &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_22_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    with `p ∧ q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_23_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
  with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_24_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show r by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu raffergon2 marfruman1 alfmarcua chrgencar gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 benber cammonagu marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_27_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms .&lt;br /&gt;
  moreover have &amp;quot;p ⟹ q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot; show &amp;quot;p ∨ r&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: p thus &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q have r using 1 4 by (rule mp)&lt;br /&gt;
    thus &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_28_1:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjI2)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show &amp;quot;p ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 *)&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim cammonagu josgomrom4 raffergon2 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_29_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule disjE)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 marfruman1 chrgencar alfmarcua pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue gleherlop antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot; (is &amp;quot;?R&amp;quot;)&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus ?R by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q ∨ r&amp;quot; thus ?R&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;q&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;r&amp;quot; thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_31_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot; thus ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume q hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume r hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_32_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: p using 1 by (rule conjunct1)&lt;br /&gt;
  show ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: q have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: r have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;q ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_33_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence q by (rule conjunct2)&lt;br /&gt;
  hence 3: &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have p using 2 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 3 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 4: &amp;quot;p ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 5: &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have p using 4 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_34_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `p ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: p hence 2: &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
  thus ?thesis using 2 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 4: &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have q using 3 by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis using 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_35_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    moreover have &amp;quot;p ∨ r&amp;quot; using `p` by (rule disjI1)&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show ?thesis using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q show ?thesis using 3&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
    next&lt;br /&gt;
      assume 5: r have &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
      thus ?thesis by (rule disjI2)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_36_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      with `q` have &amp;quot;q ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  have 2: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot; show &amp;quot;r&amp;quot; using 4&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 5: &amp;quot;p&amp;quot; show &amp;quot;r&amp;quot; using 2 5 by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: &amp;quot;q&amp;quot; show &amp;quot;r&amp;quot; using 3 6 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_37_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue antramhur enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot; hence 1: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume q hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show r using assms(1) 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_38_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber josgomrom4 raffergon2 gleherlop marfruman1 chrgencar alfmarcua pabbergue enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua pabbergue gleherlop enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: p show q using 1 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_40_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with `¬p` show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;¬q&amp;quot; show &amp;quot;¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_41_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with `p ⟶ q` show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot; show &amp;quot;p&amp;quot; using assms(2) 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_42_1:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `¬q` have &amp;quot;p&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 43. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 alfmarcua pabbergue gleherlop enrparalv hugrubsan *)&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot; show &amp;quot;q&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot; thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_43_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `¬p` have &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q&amp;quot; .&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim gleherlop josgomrom4 marfruman1 pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;¬p ∧ ¬q&amp;quot; hence 2: &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using assms(1) proof (rule disjE)&lt;br /&gt;
    assume 4: &amp;quot;p&amp;quot; show ?thesis using 2 4 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 5: &amp;quot;q&amp;quot; show ?thesis using 3 5 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_44_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬q&amp;quot; by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬p ∨ ¬q&amp;quot; have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_45_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show False by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume p hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 2 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume q hence 3: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_46_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_46_2:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  have &amp;quot;p ⟹ p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  then have &amp;quot;p ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ p&amp;quot; using assms by (rule mt)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ⟹ p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  then have &amp;quot;q ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ q&amp;quot; using assms by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbregue hugrubsan *)&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 4 proof (rule disjE)&lt;br /&gt;
    assume 5: p show ?thesis using 2 5 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: q show ?thesis using 3 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber gleherlop *)&lt;br /&gt;
lemma ejercicio_47_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∧ ¬q)&amp;quot; by (rule ejercicio_44_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_47_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have &amp;quot;¬ p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬ q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `¬ p` by (rule ejercicio_43)&lt;br /&gt;
  show False using `¬ q` `q` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence 3: p by (rule conjunct1)&lt;br /&gt;
  have 4: q using 2 by (rule conjunct2)&lt;br /&gt;
  show False&lt;br /&gt;
  using 1 proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_48_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∨ ¬q)&amp;quot; by (rule ejercicio_45_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcu gleherlop hugrubsan *)&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;p ∧ ¬p&amp;quot; hence 2: p by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_49_1:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 marfruman1 gleherlop alfmarcua enrparalv pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof (rule notE)&lt;br /&gt;
  show p using 1 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_50_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using `p ∧ ¬p` by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber raffergon2 josgomrom4 marfruman1 gleherlop alfmarcua enrparalv pabbergue hugrubsan *)&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotD)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 pabbergue*)&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(p ∨ ¬p)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; proof (rule notI)&lt;br /&gt;
    assume p hence 3: &amp;quot;p ∨ ¬p&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 4: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_52_1:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬¬p&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬p&amp;quot; using `¬p ∧ ¬¬p` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_52_2:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬ p ∧ ¬¬ p&amp;quot; by (rule ejercicio_46)&lt;br /&gt;
  then show False by (rule ejercicio_50)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 alfmarcua gleherlop pabbergue *)&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show p proof (rule ccontr)&lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 5: p show q using 2 5 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    show False using 3 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_53_1:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬ p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;p&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue *)&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; hence 3: &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua  *)&lt;br /&gt;
lemma ejercicio_54_1:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume 6: &amp;quot;¬q&amp;quot; have 7: &amp;quot;¬p ∧ ¬q&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
      show False using 1 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    have 8: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    show False using 2 8 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 9: &amp;quot;p ∨ q&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
  show False using 2 9 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua josgomrom4 manperjim pabbergue *)&lt;br /&gt;
lemma ejercicio_55_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬q&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue *)&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show 3: p&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show 5: q&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; hence 6: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_56_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using `¬¬p ∧ ¬¬q` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim marfruman1 josgomrom4 gleherlop pabbergue *)&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  show False using 1&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show 3: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    proof (rule conjI)&lt;br /&gt;
      show p&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show q&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬q&amp;quot; hence 5: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
        show False using 2 5 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_57_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;p ∧ q&amp;quot; by (rule ejercicio_56_1)&lt;br /&gt;
  with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 marfruman1 pabbergue *)&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬((p ⟶ q) ∨ ¬(p ⟶ q))&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬(p ⟶ q)&amp;quot; proof (rule notI)&lt;br /&gt;
      assume &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
      hence 3: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI1)&lt;br /&gt;
      show False using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    hence 4: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot; thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 1: &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    have &amp;quot;q ⟶ p&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 2: q&lt;br /&gt;
      have 3: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
        assume p show q using 2 .&lt;br /&gt;
      qed&lt;br /&gt;
      show p using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop *)&lt;br /&gt;
lemma ejercicio_58_2:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;(p ∧ ¬q) ∧ (q ∧ ¬p)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;p ∧ ¬q&amp;quot; ..&lt;br /&gt;
  hence 2: p ..&lt;br /&gt;
  have &amp;quot;q ∧ ¬p&amp;quot; using 1 ..&lt;br /&gt;
  hence 3: &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_58_1:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ ((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;¬(p ⟶ q) ∧ ¬(q ⟶ p)&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(p ⟶ q)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `p ⟶ q` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_58_3:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;p ∨ ¬ p&amp;quot; by (rule ejercicio_52)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40)&lt;br /&gt;
  then show ?thesis by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then have &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7)&lt;br /&gt;
  then show ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=341</id>
		<title>Relación 6</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_6&amp;diff=341"/>
		<updated>2019-02-07T11:47:39Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R6: Deducción natural proposicional *}&lt;br /&gt;
&lt;br /&gt;
theory R6_Deduccion_natural_proposicional&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
 &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  El objetivo de esta relación es demostrar cada uno de los ejercicios&lt;br /&gt;
  usando sólo las reglas básicas de deducción natural de la lógica&lt;br /&gt;
  proposicional (sin usar el método auto).&lt;br /&gt;
&lt;br /&gt;
  Las reglas básicas de la deducción natural son las siguientes:&lt;br /&gt;
  · conjI:      ⟦P; Q⟧ ⟹ P ∧ Q&lt;br /&gt;
  · conjunct1:  P ∧ Q ⟹ P&lt;br /&gt;
  · conjunct2:  P ∧ Q ⟹ Q  &lt;br /&gt;
  · notnotD:    ¬¬ P ⟹ P&lt;br /&gt;
  · notnotI:    P ⟹ ¬¬ P&lt;br /&gt;
  · mp:         ⟦P ⟶ Q; P⟧ ⟹ Q &lt;br /&gt;
  · mt:         ⟦F ⟶ G; ¬G⟧ ⟹ ¬F &lt;br /&gt;
  · impI:       (P ⟹ Q) ⟹ P ⟶ Q&lt;br /&gt;
  · disjI1:     P ⟹ P ∨ Q&lt;br /&gt;
  · disjI2:     Q ⟹ P ∨ Q&lt;br /&gt;
  · disjE:      ⟦P ∨ Q; P ⟹ R; Q ⟹ R⟧ ⟹ R &lt;br /&gt;
  · FalseE:     False ⟹ P&lt;br /&gt;
  · notE:       ⟦¬P; P⟧ ⟹ R&lt;br /&gt;
  · notI:       (P ⟹ False) ⟹ ¬P&lt;br /&gt;
  · iffI:       ⟦P ⟹ Q; Q ⟹ P⟧ ⟹ P = Q&lt;br /&gt;
  · iffD1:      ⟦Q = P; Q⟧ ⟹ P &lt;br /&gt;
  · iffD2:      ⟦P = Q; Q⟧ ⟹ P&lt;br /&gt;
  · ccontr:     (¬P ⟹ False) ⟹ P&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  Se usarán las reglas notnotI y mt que demostramos a continuación. *}&lt;br /&gt;
&lt;br /&gt;
lemma notnotI: &amp;quot;P ⟹ ¬¬ P&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
lemma mt: &amp;quot;⟦F ⟶ G; ¬G⟧ ⟹ ¬F&amp;quot;&lt;br /&gt;
by auto&lt;br /&gt;
&lt;br /&gt;
section {* Implicaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Demostrar&lt;br /&gt;
       p ⟶ q, p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu raffergon2 chrgencar gleherlop giafus1 &lt;br /&gt;
marfruman1 enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_1:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  show &amp;quot;q&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_1_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule mp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_2_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot; &lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r), p ⟶ q, p ⊢ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu gleherlop raffergon2 chrgencar giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_3:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; and&lt;br /&gt;
          2: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          3: &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_3_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
          &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;p&amp;quot;&lt;br /&gt;
  shows &amp;quot;r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using `p ⟶ (q ⟶ r)` `p` by (rule mp)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Demostrar&lt;br /&gt;
     p ⟶ q, q ⟶ r ⊢ p ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_4:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; and&lt;br /&gt;
          2: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp) &lt;br /&gt;
    have 5: &amp;quot;r&amp;quot; using 2 4 by (rule mp)}&lt;br /&gt;
  thus &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_4_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
          &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ q ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 gleherlop&lt;br /&gt;
marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_5:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu  *)&lt;br /&gt;
lemma ejercicio_5_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `q` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma ejercicio_5_2:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  { assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    { assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;r&amp;quot; using 4 2 by (rule mp)}&lt;br /&gt;
    hence &amp;quot;p ⟶ r&amp;quot; by (rule impI)&lt;br /&gt;
  }&lt;br /&gt;
  thus &amp;quot;q ⟶ (p ⟶ r)&amp;quot; by (rule impI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ (p ⟶ q) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu chrgencar raffergon2 gleherlop giafus1 &lt;br /&gt;
marfruman1 alfmarcua enrparalv pabbergue  antramhur alikan *)&lt;br /&gt;
lemma ejercicio_6:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma ejercicio_6_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
    moreover from `p ⟶ q` `p` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar&lt;br /&gt;
     p ⊢ q ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 gleherlop marfruman1 enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_7:&lt;br /&gt;
  assumes 1: &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
  show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu chrgencar *)&lt;br /&gt;
lemma ejercicio_7_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p&amp;quot; using `p` .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_7_2:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  using assms by (rule impI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar&lt;br /&gt;
     ⊢ p ⟶ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 giafus1 marfruman1 enrparalv pabbergue antramhur alikan*)&lt;br /&gt;
lemma ejercicio_8:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ p&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p&amp;quot; using 1 by this&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu gleherlop chrgencar alfmarcua *)&lt;br /&gt;
lemma ejercicio_8_1:&lt;br /&gt;
  &amp;quot;p ⟶ (q ⟶ p)&amp;quot;&lt;br /&gt;
  using ejercicio_7_1 by (rule impI)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ (q ⟶ r) ⟶ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 giafus1 marfruman1 alfmarcua enrparalv gleherlop antramhur alikan*)&lt;br /&gt;
lemma ejercicio_9:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;q&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 2 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar pabbergue *)&lt;br /&gt;
lemma ejercicio_9_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(q ⟶ r) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `p ⟶ q` have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ (r ⟶ s)) ⊢ r ⟶ (q ⟶ (p ⟶ s))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop alfmarcua enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_10:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 4: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 5: &amp;quot;q ⟶ (r ⟶ s)&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
      have 6: &amp;quot;r ⟶ s&amp;quot; using 5 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;s&amp;quot; using 6 2 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 cammonagu chrgencar giafus1 *)&lt;br /&gt;
lemma ejercicio_10_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ (r ⟶ s))&amp;quot; &lt;br /&gt;
  shows   &amp;quot;r ⟶ (q ⟶ (p ⟶ s))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;r&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ (p ⟶ s)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ s&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      with `p ⟶ (q ⟶ (r ⟶ s))`&lt;br /&gt;
        have &amp;quot;q ⟶ (r ⟶ s)&amp;quot; by (rule mp)&lt;br /&gt;
      hence &amp;quot;r ⟶ s&amp;quot; using `q` by (rule mp)&lt;br /&gt;
      thus &amp;quot;s&amp;quot; using `r` by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 gleherlop cammonagu giafus1 alfmarcua chrgencar pabbergue alikan *)&lt;br /&gt;
lemma ejercicio_11:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot; using 1 ejercicio_6 by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 enrparalv antramhur *)&lt;br /&gt;
lemma ejercicio_11_2:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 3: &amp;quot;p&amp;quot;&lt;br /&gt;
      have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
      have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
      show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_11_1:&lt;br /&gt;
  &amp;quot;(p ⟶ (q ⟶ r)) ⟶ ((p ⟶ q) ⟶ (p ⟶ r))&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
  show &amp;quot;(p ⟶ q) ⟶ (p ⟶ r)&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      assume p&lt;br /&gt;
      with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
      moreover have &amp;quot;q&amp;quot; using `p ⟶ q` `p` by (rule mp)&lt;br /&gt;
      ultimately show r by (rule mp)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 marfruman1 gleherlop enrparalv pabbergue antramhur alikan *)&lt;br /&gt;
lemma ejercicio_12:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
    proof (rule impI)&lt;br /&gt;
      assume 5: &amp;quot;p&amp;quot;&lt;br /&gt;
      show &amp;quot;q&amp;quot; using 3 by this&lt;br /&gt;
    qed&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber  josgomrom4 cammonagu giafus1 alfmarcua chrgencar *)&lt;br /&gt;
lemma ejercicio_12_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
    with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Conjunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar&lt;br /&gt;
     p, q ⊢  p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  *)&lt;br /&gt;
lemma ejercicio_13:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
using assms(1, 2) by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar gleherlop pabbergue antramhur*)&lt;br /&gt;
lemma ejercicio_13_1:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
          &amp;quot;q&amp;quot; &lt;br /&gt;
  shows &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  using assms by (rule conjI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon  josgomrom4 *)&lt;br /&gt;
lemma ejercicio_14:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue gleherlop antramhur *)&lt;br /&gt;
lemma ejercicio_14_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot;  &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar&lt;br /&gt;
     p ∧ q ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 *)&lt;br /&gt;
lemma ejercicio_15:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 marfruman1 alfmarcua enrparalv chrgencar pabbergue antramhur gleherlop *)&lt;br /&gt;
lemma ejercicio_15_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
  using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar&lt;br /&gt;
     p ∧ (q ∧ r) ⊢ (p ∧ q) ∧ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammmonagu enrparalv chrgencar gleherlop pabbergue antramhur *)&lt;br /&gt;
lemma ejercicio_16:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 1: &amp;quot;p&amp;quot; using assms(1) by (rule conjunct1)&lt;br /&gt;
  have 2: &amp;quot;q ∧ r&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;q&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;r&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;p ∧ q&amp;quot; using 1 3 by (rule conjI)&lt;br /&gt;
  show &amp;quot;(p ∧ q) ∧ r&amp;quot; using 5 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_16_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∧ r&amp;quot;&lt;br /&gt;
proof - (* TODO? *)&lt;br /&gt;
  have &amp;quot;q ∧ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
  moreover have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;(p ∧ q) ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar&lt;br /&gt;
     (p ∧ q) ∧ r ⊢ p ∧ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_17:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 3: &amp;quot;p ∧ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  have 6: &amp;quot;q ∧ r&amp;quot; using 5 2 by (rule conjI)&lt;br /&gt;
  show ?thesis using 4 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_17_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∧ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
  moreover have &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof (rule conjI)&lt;br /&gt;
    show &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show ?thesis by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 18. Demostrar&lt;br /&gt;
     p ∧ q ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1*)&lt;br /&gt;
lemma ejercicio_18:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms(1) by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber manperjim josgomrom4 cammonagu alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_18_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 19. Demostrar&lt;br /&gt;
     (p ⟶ q) ∧ (p ⟶ r) ⊢ p ⟶ q ∧ r   &lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_19:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 3 2 by (rule mp)&lt;br /&gt;
  have 6: &amp;quot;r&amp;quot; using 4 2 by (rule mp)&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot; using 5 6 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma ejercicio_19_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q ∧ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume p&lt;br /&gt;
  show &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    have &amp;quot;p ⟶ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; using `p` by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 20. Demostrar&lt;br /&gt;
     p ⟶ q ∧ r ⊢ (p ⟶ q) ∧ (p ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua cammonagu chrgencar gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_20:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;q&amp;quot; using 3 by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;q ∧ r&amp;quot; using 1 2 by (rule mp)&lt;br /&gt;
    show 4: &amp;quot;r&amp;quot; using 3 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_20_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q ∧ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ∧ (p ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;q&amp;quot; by (rule conjunct1)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with assms have &amp;quot;q ∧ r&amp;quot; by (rule mp)&lt;br /&gt;
    thus &amp;quot;r&amp;quot; by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 21. Demostrar&lt;br /&gt;
     p ⟶ (q ⟶ r) ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua cammonagu chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_21:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 2 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_21_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  with `p ⟶ (q ⟶ r)` have &amp;quot;q ⟶ r&amp;quot; by (rule mp)&lt;br /&gt;
  moreover from `p ∧ q` have &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 22. Demostrar&lt;br /&gt;
     p ∧ q ⟶ r ⊢ p ⟶ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_22:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume 3: &amp;quot;q&amp;quot;&lt;br /&gt;
    have 4: &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using 1 4 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_22_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    with `p ∧ q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 23. Demostrar&lt;br /&gt;
     (p ⟶ q) ⟶ r ⊢ p ∧ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_23:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    show &amp;quot;q&amp;quot; using 2 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;r&amp;quot; using 1 3 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_23_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ q) ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;q&amp;quot; by (rule conjunct2)&lt;br /&gt;
  hence &amp;quot;p ⟶ q&amp;quot; by (rule impI)&lt;br /&gt;
  with `(p ⟶ q) ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 24. Demostrar&lt;br /&gt;
     p ∧ (q ⟶ r) ⊢ (p ⟶ q) ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_24:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  have 5: &amp;quot;q&amp;quot; using 2 3 by (rule mp)&lt;br /&gt;
  show 6: &amp;quot;r&amp;quot; using 4 5 by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_24_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ q) ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
&lt;br /&gt;
  assume &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  ultimately have &amp;quot;q&amp;quot; by (rule mp)&lt;br /&gt;
  with `q ⟶ r` show r by (rule mp)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Disyunciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 25. Demostrar&lt;br /&gt;
     p ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber cammonagu raffergon2 marfruman1 alfmarcua chrgencar gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_25:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 26. Demostrar&lt;br /&gt;
     q ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber cammonagu marfruman1 alfmarcua chrgencar pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_26:&lt;br /&gt;
  assumes &amp;quot;q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI2)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 27. Demostrar&lt;br /&gt;
     p ∨ q ⊢ q ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 chrgencar pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_27:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q&amp;quot; thus &amp;quot;q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_27_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q ∨ p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms .&lt;br /&gt;
  moreover have &amp;quot;p ⟹ q ∨ p&amp;quot; by (rule disjI2)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q ∨ p&amp;quot; by (rule disjI1)&lt;br /&gt;
  ultimately show &amp;quot;q ∨ p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 28. Demostrar&lt;br /&gt;
     q ⟶ r ⊢ p ∨ q ⟶ p ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_28:&lt;br /&gt;
  assumes 1: &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p ∨ q&amp;quot; show &amp;quot;p ∨ r&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: p thus &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q have r using 1 4 by (rule mp)&lt;br /&gt;
    thus &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_28_1:&lt;br /&gt;
  assumes &amp;quot;q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ p ∨ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  moreover have &amp;quot;q ⟹ p ∨ r&amp;quot;&lt;br /&gt;
  proof (rule disjI2)&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `q ⟶ r` show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
  ultimately show &amp;quot;p ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 29. Demostrar&lt;br /&gt;
     p ∨ p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 *)&lt;br /&gt;
lemma ejercicio_29:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu raffergon2 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_29_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms by (rule disjE)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 30. Demostrar&lt;br /&gt;
     p ⊢ p ∨ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber raffergon2 marfruman1 chrgencar alfmarcua pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_30:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule disjI1)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 31. Demostrar&lt;br /&gt;
     p ∨ (q ∨ r) ⊢ (p ∨ q) ∨ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua pabbergue gleherlop antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_31:&lt;br /&gt;
  assumes 1: &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot; (is &amp;quot;?R&amp;quot;)&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  thus ?R by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q ∨ r&amp;quot; thus ?R&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;q&amp;quot; hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    thus &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;r&amp;quot; thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_31_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∨ r&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∨ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∨ r&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      hence &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;(p ∨ q) ∨ r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 32. Demostrar&lt;br /&gt;
     (p ∨ q) ∨ r ⊢ p ∨ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_32:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
using 1 proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot; thus ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume q hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  assume r hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_32_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∨ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∨ q) ∨ r&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;q&amp;quot;&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 33. Demostrar&lt;br /&gt;
     p ∧ (q ∨ r) ⊢ (p ∧ q) ∨ (p ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 chrgencar gleherlop alfmarcua pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_33:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: p using 1 by (rule conjunct1)&lt;br /&gt;
  show ?thesis&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 3: q have &amp;quot;p ∧ q&amp;quot; using 2 3 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: r have &amp;quot;p ∧ r&amp;quot; using 2 4 by (rule conjI)&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;q ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_33_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ (q ∨ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;q ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;r&amp;quot;&lt;br /&gt;
    with `p` have &amp;quot;p ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
    hence ?thesis by (rule disjI2)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 34. Demostrar&lt;br /&gt;
     (p ∧ q) ∨ (p ∧ r) ⊢ p ∧ (q ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_34:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence q by (rule conjunct2)&lt;br /&gt;
  hence 3: &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have p using 2 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 3 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 4: &amp;quot;p ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 5: &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have p using 4 by (rule conjunct1)&lt;br /&gt;
  thus ?thesis using 5 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_34_1:&lt;br /&gt;
  assumes &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ (q ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ∧ q) ∨ (p ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p ∧ r&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `p ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;q ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 35. Demostrar&lt;br /&gt;
     p ∨ (q ∧ r) ⊢ (p ∨ q) ∧ (p ∨ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_35:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: p hence 2: &amp;quot;p ∨ r&amp;quot; by (rule disjI1)&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using 1 by (rule disjI1)&lt;br /&gt;
  thus ?thesis using 2 by (rule conjI)&lt;br /&gt;
next&lt;br /&gt;
  assume 3: &amp;quot;q ∧ r&amp;quot; hence r by (rule conjunct2)&lt;br /&gt;
  hence 4: &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
  have q using 3 by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  thus ?thesis using 4 by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_35_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ (q ∧ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ (q ∧ r)&amp;quot; using assms .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    moreover have &amp;quot;p ∨ r&amp;quot; using `p` by (rule disjI1)&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q ∧ r&amp;quot;&lt;br /&gt;
    {&lt;br /&gt;
      have &amp;quot;q&amp;quot; using `q ∧ r` by (rule conjunct1)&lt;br /&gt;
      hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      have &amp;quot;r&amp;quot; using `q ∧ r` by (rule conjunct2)&lt;br /&gt;
      hence &amp;quot;p ∨ r&amp;quot; by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule conjI)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 36. Demostrar&lt;br /&gt;
     (p ∨ q) ∧ (p ∨ r) ⊢ p ∨ (q ∧ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 chrgencar alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_36:&lt;br /&gt;
  assumes 1: &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have 2: &amp;quot;p ∨ q&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;p ∨ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show ?thesis using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 4: q show ?thesis using 3&lt;br /&gt;
    proof (rule disjE)&lt;br /&gt;
      assume p thus ?thesis by (rule disjI1)&lt;br /&gt;
    next&lt;br /&gt;
      assume 5: r have &amp;quot;q ∧ r&amp;quot; using 4 5 by (rule conjI)&lt;br /&gt;
      thus ?thesis by (rule disjI2)&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_36_1:&lt;br /&gt;
  assumes &amp;quot;(p ∨ q) ∧ (p ∨ r)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ (q ∧ r)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;p ∨ q&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence ?thesis by (rule disjI1)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    have &amp;quot;p ∨ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;p&amp;quot;&lt;br /&gt;
      hence ?thesis by (rule disjI1)&lt;br /&gt;
    }&lt;br /&gt;
    moreover {&lt;br /&gt;
      assume &amp;quot;r&amp;quot;&lt;br /&gt;
      with `q` have &amp;quot;q ∧ r&amp;quot; by (rule conjI)&lt;br /&gt;
      hence ?thesis by (rule disjI2)&lt;br /&gt;
    }&lt;br /&gt;
    ultimately have ?thesis by (rule disjE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show ?thesis by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 37. Demostrar&lt;br /&gt;
     (p ⟶ r) ∧ (q ⟶ r) ⊢ p ∨ q ⟶ r&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_37:&lt;br /&gt;
  assumes 1: &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  have 2: &amp;quot;p ⟶ r&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;q ⟶ r&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot; show &amp;quot;r&amp;quot; using 4&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume 5: &amp;quot;p&amp;quot; show &amp;quot;r&amp;quot; using 2 5 by (rule mp)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: &amp;quot;q&amp;quot; show &amp;quot;r&amp;quot; using 3 6 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_37_1:&lt;br /&gt;
  assumes &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∨ q ⟶ r&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;p ⟶ r&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;q ⟶ r&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;r&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 38. Demostrar&lt;br /&gt;
     p ∨ q ⟶ r ⊢ (p ⟶ r) ∧ (q ⟶ r)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua gleherlop pabbergue antramhur enrparalv *)&lt;br /&gt;
lemma ejercicio_38:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume &amp;quot;p&amp;quot; hence 1: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;r&amp;quot; using assms(1) 1 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof (rule impI)&lt;br /&gt;
    assume q hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show r using assms(1) 2 by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_38_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q ⟶ r&amp;quot; &lt;br /&gt;
  shows   &amp;quot;(p ⟶ r) ∧ (q ⟶ r)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;p ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;q ⟶ r&amp;quot;&lt;br /&gt;
  proof&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;r&amp;quot; by (rule mp)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
section {* Negaciones *}&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 39. Demostrar&lt;br /&gt;
     p ⊢ ¬¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim  benber raffergon2 gleherlop marfruman1 chrgencar alfmarcua pabbergue enrparalv *)&lt;br /&gt;
lemma ejercicio_39:&lt;br /&gt;
  assumes &amp;quot;p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotI)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 40. Demostrar&lt;br /&gt;
     ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua pabbergue gleherlop enrparalv *)&lt;br /&gt;
lemma ejercicio_40:&lt;br /&gt;
  assumes 1: &amp;quot;¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: p show q using 1 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_40_1:&lt;br /&gt;
  assumes &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  with `¬p` show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 41. Demostrar&lt;br /&gt;
     p ⟶ q ⊢ ¬q ⟶ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua pabbergue gleherlop enrparalv *)&lt;br /&gt;
lemma ejercicio_41:&lt;br /&gt;
  assumes 1: &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;¬q&amp;quot; show &amp;quot;¬p&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_41_1:&lt;br /&gt;
  assumes &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
  with `p ⟶ q` show &amp;quot;¬p&amp;quot; by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p∨q, ¬q ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua pabbergue gleherlop enrparalv *)&lt;br /&gt;
lemma ejercicio_42:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume &amp;quot;p&amp;quot; thus &amp;quot;p&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  assume 2: &amp;quot;q&amp;quot; show &amp;quot;p&amp;quot; using assms(2) 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_42_1:&lt;br /&gt;
  assumes &amp;quot;p∨q&amp;quot;&lt;br /&gt;
          &amp;quot;¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;q&amp;quot;&lt;br /&gt;
    with `¬q` have &amp;quot;p&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 42. Demostrar&lt;br /&gt;
     p ∨ q, ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 alfmarcua pabbergue gleherlop enrparalv *)&lt;br /&gt;
lemma ejercicio_43:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
using assms(1) proof (rule disjE)&lt;br /&gt;
  assume 1: &amp;quot;p&amp;quot; show &amp;quot;q&amp;quot; using assms(2) 1 by (rule notE)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;q&amp;quot; thus &amp;quot;q&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_43_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
          &amp;quot;¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    with `¬p` have &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover have &amp;quot;q ⟹ q&amp;quot; .&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 44. Demostrar&lt;br /&gt;
     p ∨ q ⊢ ¬(¬p ∧ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop marfruman1*)&lt;br /&gt;
lemma ejercicio_44:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;¬p ∧ ¬q&amp;quot; hence 2: &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot;&lt;br /&gt;
  using assms(1) proof (rule disjE)&lt;br /&gt;
    assume 4: &amp;quot;p&amp;quot; show ?thesis using 2 4 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 5: &amp;quot;q&amp;quot; show ?thesis using 3 5 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_44_1:&lt;br /&gt;
  assumes &amp;quot;p ∨ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  note `p ∨ q`&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
    moreover assume &amp;quot;p&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    from `¬p ∧ ¬q` have &amp;quot;¬q&amp;quot; by (rule conjunct2)&lt;br /&gt;
    moreover assume &amp;quot;q&amp;quot;&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 45. Demostrar&lt;br /&gt;
     p ∧ q ⊢ ¬(¬p ∨ ¬q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 gleherlop *)&lt;br /&gt;
lemma ejercicio_45:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;¬p ∨ ¬q&amp;quot; have 3: &amp;quot;p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 4: &amp;quot;q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 2&lt;br /&gt;
  proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_45_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;p&amp;quot; using `p ∧ q` by (rule conjunct1)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot;&lt;br /&gt;
    moreover have &amp;quot;q&amp;quot; using `p ∧ q` by (rule conjunct2)&lt;br /&gt;
    ultimately have &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show False by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 46. Demostrar&lt;br /&gt;
     ¬(p ∨ q) ⊢ ¬p ∧ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 gleherlop *)&lt;br /&gt;
lemma ejercicio_46:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume p hence 2: &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 2 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule notI)&lt;br /&gt;
    assume q hence 3: &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_46_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  show &amp;quot;¬p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
next&lt;br /&gt;
  show &amp;quot;¬q&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬¬q&amp;quot;&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
    hence &amp;quot;p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
    with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_46_2:&lt;br /&gt;
  assumes &amp;quot;¬(p ∨ q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬p ∧ ¬q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  have &amp;quot;p ⟹ p ∨ q&amp;quot; by (rule disjI1)&lt;br /&gt;
  then have &amp;quot;p ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ p&amp;quot; using assms by (rule mt)&lt;br /&gt;
next&lt;br /&gt;
  have &amp;quot;q ⟹ p ∨ q&amp;quot; by (rule disjI2)&lt;br /&gt;
  then have &amp;quot;q ⟶ p ∨ q&amp;quot; by (rule impI)&lt;br /&gt;
  then show &amp;quot;¬ q&amp;quot; using assms by (rule mt)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 47. Demostrar&lt;br /&gt;
     ¬p ∧ ¬q ⊢ ¬(p ∨ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 *)&lt;br /&gt;
lemma ejercicio_47:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
  have 3: &amp;quot;¬q&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  assume 4: &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  show False&lt;br /&gt;
  using 4 proof (rule disjE)&lt;br /&gt;
    assume 5: p show ?thesis using 2 5 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume 6: q show ?thesis using 3 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber gleherlop *)&lt;br /&gt;
lemma ejercicio_47_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∧ ¬q)&amp;quot; by (rule ejercicio_44_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_47_2:&lt;br /&gt;
  assumes &amp;quot;¬p ∧ ¬q&amp;quot; &lt;br /&gt;
  shows   &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  have &amp;quot;¬ p&amp;quot; using assms by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬ q&amp;quot; using assms by (rule conjunct2)&lt;br /&gt;
  assume &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
  then have &amp;quot;q&amp;quot; using `¬ p` by (rule ejercicio_43)&lt;br /&gt;
  show False using `¬ q` `q` by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 48. Demostrar&lt;br /&gt;
     ¬p ∨ ¬q ⊢ ¬(p ∧ q)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_48:&lt;br /&gt;
  assumes 1: &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 2: &amp;quot;p ∧ q&amp;quot; hence 3: p by (rule conjunct1)&lt;br /&gt;
  have 4: q using 2 by (rule conjunct2)&lt;br /&gt;
  show False&lt;br /&gt;
  using 1 proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; thus ?thesis using 3 by (rule notE)&lt;br /&gt;
  next&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; thus ?thesis using 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_48_1:&lt;br /&gt;
  assumes &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬(¬p ∨ ¬q)&amp;quot; by (rule ejercicio_45_1)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using assms by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 49. Demostrar&lt;br /&gt;
     ⊢ ¬(p ∧ ¬p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcu gleherlop *)&lt;br /&gt;
lemma ejercicio_49:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof (rule notI)&lt;br /&gt;
  assume 1: &amp;quot;p ∧ ¬p&amp;quot; hence 2: p by (rule conjunct1)&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
  thus &amp;quot;False&amp;quot; using 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_49_1:&lt;br /&gt;
  &amp;quot;¬(p ∧ ¬p)&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 50. Demostrar&lt;br /&gt;
     p ∧ ¬p ⊢ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 marfruman1 gleherlop alfmarcua enrparalv *)&lt;br /&gt;
lemma ejercicio_50:&lt;br /&gt;
  assumes 1: &amp;quot;p ∧ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof (rule notE)&lt;br /&gt;
  show p using 1 by (rule conjunct1)&lt;br /&gt;
  show &amp;quot;¬p&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_50_1:&lt;br /&gt;
  assumes &amp;quot;p ∧ ¬p&amp;quot; &lt;br /&gt;
  shows   &amp;quot;q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬p&amp;quot; using `p ∧ ¬p` by (rule conjunct2)&lt;br /&gt;
  moreover have &amp;quot;p&amp;quot; using `p ∧ ¬p` by (rule conjunct1)&lt;br /&gt;
  ultimately show &amp;quot;q&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 51. Demostrar&lt;br /&gt;
     ¬¬p ⊢ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim benber raffergon2 marfruman1 gleherlop alfmarcua enrparalv *)&lt;br /&gt;
lemma ejercicio_51:&lt;br /&gt;
  assumes &amp;quot;¬¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p&amp;quot;&lt;br /&gt;
  using assms(1) by (rule notnotD)&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 52. Demostrar&lt;br /&gt;
     ⊢ p ∨ ¬p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_52:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬(p ∨ ¬p)&amp;quot;&lt;br /&gt;
  have 2: &amp;quot;¬p&amp;quot; proof (rule notI)&lt;br /&gt;
    assume p hence 3: &amp;quot;p ∨ ¬p&amp;quot; by (rule disjI1)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 3 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 4: &amp;quot;p ∨ ¬p&amp;quot; using 2 by (rule disjI2)&lt;br /&gt;
  show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_52_1:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬¬p&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬p&amp;quot; using `¬p ∧ ¬¬p` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_52_2:&lt;br /&gt;
  &amp;quot;p ∨ ¬p&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ (p ∨ ¬ p)&amp;quot;&lt;br /&gt;
  then have &amp;quot;¬ p ∧ ¬¬ p&amp;quot; by (rule ejercicio_46)&lt;br /&gt;
  then show False by (rule ejercicio_50)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 53. Demostrar&lt;br /&gt;
     ⊢ ((p ⟶ q) ⟶ p) ⟶ p&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 alfmarcua gleherlop *)&lt;br /&gt;
lemma ejercicio_53:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 1: &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  show p proof (rule ccontr)&lt;br /&gt;
    assume 2: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 3: &amp;quot;¬(p ⟶ q)&amp;quot; using 1 2 by (rule mt)&lt;br /&gt;
    have 4: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 5: p show q using 2 5 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    show False using 3 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_53_1:&lt;br /&gt;
  &amp;quot;((p ⟶ q) ⟶ p) ⟶ p&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;(p ⟶ q) ⟶ p&amp;quot;&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover have &amp;quot;p ⟹ p&amp;quot; .&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬ p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
    with `(p ⟶ q) ⟶ p` have &amp;quot;p&amp;quot; by (rule mp)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p&amp;quot; by (rule disjE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 54. Demostrar&lt;br /&gt;
     ¬q ⟶ ¬p ⊢ p ⟶ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 gleherlop *)&lt;br /&gt;
lemma ejercicio_54:&lt;br /&gt;
  assumes 1: &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof (rule impI)&lt;br /&gt;
  assume 2: &amp;quot;p&amp;quot; hence 3: &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  have &amp;quot;¬¬q&amp;quot; using 1 3 by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua  *)&lt;br /&gt;
lemma ejercicio_54_1:&lt;br /&gt;
  assumes &amp;quot;¬q ⟶ ¬p&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ⟶ q&amp;quot;&lt;br /&gt;
proof&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule notnotI)&lt;br /&gt;
  with assms have &amp;quot;¬¬q&amp;quot; by (rule mt)&lt;br /&gt;
  thus &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 55. Demostrar&lt;br /&gt;
     ¬(¬p ∧ ¬q) ⊢ p ∨ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1*)&lt;br /&gt;
lemma ejercicio_55:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  have 3: &amp;quot;p&amp;quot;&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume 4: &amp;quot;¬p&amp;quot;&lt;br /&gt;
    have 5: &amp;quot;q&amp;quot;&lt;br /&gt;
    proof (rule ccontr)&lt;br /&gt;
      assume 6: &amp;quot;¬q&amp;quot; have 7: &amp;quot;¬p ∧ ¬q&amp;quot; using 4 6 by (rule conjI)&lt;br /&gt;
      show False using 1 7 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    have 8: &amp;quot;p ∨ q&amp;quot; using 5 by (rule disjI2)&lt;br /&gt;
    show False using 2 8 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  have 9: &amp;quot;p ∨ q&amp;quot; using 3 by (rule disjI1)&lt;br /&gt;
  show False using 2 9 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua*)&lt;br /&gt;
lemma ejercicio_55_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∧ ¬q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;p ∨ q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(p ∨ q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;¬p ∧ ¬q&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
  with assms show False by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 56. Demostrar&lt;br /&gt;
     ¬(¬p ∨ ¬q) ⊢ p ∧ q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1 gleherlop *)&lt;br /&gt;
lemma ejercicio_56:&lt;br /&gt;
  assumes 1: &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof (rule conjI)&lt;br /&gt;
  show 3: p&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
    show False using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  show 5: q&lt;br /&gt;
  proof (rule ccontr)&lt;br /&gt;
    assume &amp;quot;¬q&amp;quot; hence 6: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
    show False using 1 6 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_56_1:&lt;br /&gt;
  assumes &amp;quot;¬(¬p ∨ ¬q)&amp;quot; &lt;br /&gt;
  shows   &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;¬¬p ∧ ¬¬q&amp;quot; using assms by (rule ejercicio_46_1)&lt;br /&gt;
  hence &amp;quot;¬¬p&amp;quot; by (rule conjunct1)&lt;br /&gt;
  hence &amp;quot;p&amp;quot; by (rule notnotD)&lt;br /&gt;
  moreover {&lt;br /&gt;
    have &amp;quot;¬¬q&amp;quot; using `¬¬p ∧ ¬¬q` by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;q&amp;quot; by (rule notnotD)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;p ∧ q&amp;quot; by (rule conjI)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 57. Demostrar&lt;br /&gt;
     ¬(p ∧ q) ⊢ ¬p ∨ ¬q&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1gleherlop *)&lt;br /&gt;
lemma ejercicio_57:&lt;br /&gt;
  assumes 1: &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 2: &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  show False using 1&lt;br /&gt;
  proof (rule notE)&lt;br /&gt;
    show 3: &amp;quot;p ∧ q&amp;quot;&lt;br /&gt;
    proof (rule conjI)&lt;br /&gt;
      show p&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬p&amp;quot; hence 4: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI1)&lt;br /&gt;
        show False using 2 4 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    next&lt;br /&gt;
      show q&lt;br /&gt;
      proof (rule ccontr)&lt;br /&gt;
        assume &amp;quot;¬q&amp;quot; hence 5: &amp;quot;¬p ∨ ¬q&amp;quot; by (rule disjI2)&lt;br /&gt;
        show False using 2 5 by (rule notE)&lt;br /&gt;
      qed&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber alfmarcua *)&lt;br /&gt;
lemma ejercicio_57_1:&lt;br /&gt;
  assumes &amp;quot;¬(p ∧ q)&amp;quot;&lt;br /&gt;
  shows   &amp;quot;¬p ∨ ¬q&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬(¬p ∨ ¬q)&amp;quot;&lt;br /&gt;
  hence &amp;quot;p ∧ q&amp;quot; by (rule ejercicio_56_1)&lt;br /&gt;
  with assms show &amp;quot;False&amp;quot; by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 58. Demostrar&lt;br /&gt;
     ⊢ (p ⟶ q) ∨ (q ⟶ p)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon marfruman1  *)&lt;br /&gt;
lemma ejercicio_58:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; proof (rule ccontr)&lt;br /&gt;
    assume 1: &amp;quot;¬((p ⟶ q) ∨ ¬(p ⟶ q))&amp;quot;&lt;br /&gt;
    have 2: &amp;quot;¬(p ⟶ q)&amp;quot; proof (rule notI)&lt;br /&gt;
      assume &amp;quot;p ⟶ q&amp;quot; &lt;br /&gt;
      hence 3: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI1)&lt;br /&gt;
      show False using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    hence 4: &amp;quot;(p ⟶ q) ∨ ¬(p ⟶ q)&amp;quot; by (rule disjI2)&lt;br /&gt;
    show &amp;quot;False&amp;quot; using 1 4 by (rule notE)&lt;br /&gt;
  qed&lt;br /&gt;
  thus ?thesis proof (rule disjE)&lt;br /&gt;
    assume &amp;quot;p ⟶ q&amp;quot; thus ?thesis by (rule disjI1)&lt;br /&gt;
  next&lt;br /&gt;
    assume 1: &amp;quot;¬(p ⟶ q)&amp;quot;&lt;br /&gt;
    have &amp;quot;q ⟶ p&amp;quot; proof (rule impI)&lt;br /&gt;
      assume 2: q&lt;br /&gt;
      have 3: &amp;quot;p ⟶ q&amp;quot; proof (rule impI)&lt;br /&gt;
        assume p show q using 2 .&lt;br /&gt;
      qed&lt;br /&gt;
      show p using 1 3 by (rule notE)&lt;br /&gt;
    qed&lt;br /&gt;
    thus ?thesis by (rule disjI2)&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon gleherlop *)&lt;br /&gt;
lemma ejercicio_58_2:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume 1: &amp;quot;¬((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;(p ∧ ¬q) ∧ (q ∧ ¬p)&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;p ∧ ¬q&amp;quot; ..&lt;br /&gt;
  hence 2: p ..&lt;br /&gt;
  have &amp;quot;q ∧ ¬p&amp;quot; using 1 ..&lt;br /&gt;
  hence 3: &amp;quot;¬p&amp;quot; ..&lt;br /&gt;
  show False using 3 2 by (rule notE)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma ejercicio_58_1:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule ccontr)&lt;br /&gt;
  assume &amp;quot;¬ ((p ⟶ q) ∨ (q ⟶ p))&amp;quot;&lt;br /&gt;
  hence 1: &amp;quot;¬(p ⟶ q) ∧ ¬(q ⟶ p)&amp;quot; by (rule ejercicio_46_1)&lt;br /&gt;
&lt;br /&gt;
  have &amp;quot;p ∨ ¬p&amp;quot; by (rule ejercicio_52_1)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
    hence &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(p ⟶ q)&amp;quot; using 1 by (rule conjunct1)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `p ⟶ q` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
  ultimately show &amp;quot;False&amp;quot; by (rule disjE)&lt;br /&gt;
  moreover {&lt;br /&gt;
    assume &amp;quot;p&amp;quot;&lt;br /&gt;
    hence &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7_1)&lt;br /&gt;
&lt;br /&gt;
    have &amp;quot;¬(q ⟶ p)&amp;quot; using 1 by (rule conjunct2)&lt;br /&gt;
    hence &amp;quot;False&amp;quot; using `q ⟶ p` by (rule notE)&lt;br /&gt;
  }&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma ejercicio_58_3:&lt;br /&gt;
  &amp;quot;(p ⟶ q) ∨ (q ⟶ p)&amp;quot;&lt;br /&gt;
proof (rule disjE)&lt;br /&gt;
  show &amp;quot;p ∨ ¬ p&amp;quot; by (rule ejercicio_52)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;¬p&amp;quot;&lt;br /&gt;
  then have &amp;quot;p ⟶ q&amp;quot; by (rule ejercicio_40)&lt;br /&gt;
  then show ?thesis by (rule disjI1)&lt;br /&gt;
next&lt;br /&gt;
  assume &amp;quot;p&amp;quot;&lt;br /&gt;
  then have &amp;quot;q ⟶ p&amp;quot; by (rule ejercicio_7)&lt;br /&gt;
  then show ?thesis by (rule disjI2)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=339</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=339"/>
		<updated>2019-02-07T10:10:58Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R5: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R5_Recorridos_de_arboles_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan juacanrod *) &lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;preOrden (N x i d) = x # preOrden i @ preOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))  &lt;br /&gt;
      = [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan juacanrod*) &lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;postOrden (N x i d) = postOrden i @ postOrden d @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan juacanrod*) &lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;inOrden (N x i d) = inOrden i @ [x] @ inOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan juacanrod*) &lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x)     = H x&amp;quot; |&lt;br /&gt;
  &amp;quot;espejo (N x i d) = N x (espejo d) (espejo i)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h))) &lt;br /&gt;
       = N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar pabbergue giafus1 alikan juacanrod*)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N x i d)) = &lt;br /&gt;
        preOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # preOrden (espejo d) @ preOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # rev (postOrden d) @ rev (postOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden d @ [x]) @ rev (postOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N v l r)) = &lt;br /&gt;
        preOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = v # (preOrden (espejo r)) @ (preOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = v # rev (postOrden r) @ rev (postOrden l)&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((postOrden l) @ (postOrden r) @ [v])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
lemma &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) =&lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden i @ preOrden d) @ rev [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 juacanrod*)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d &lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) = &lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (x # preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan juacanrod *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden i @ [x] @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a) &lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden(N x (espejo d) (espejo i))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # inOrden d) @ rev (inOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(inOrden i @ x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N v l r)) = &lt;br /&gt;
        inOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (inOrden (espejo r)) @ [v] @ (inOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (rev (inOrden r)) @ [v] @ (rev (inOrden l))&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((inOrden l) @ [v] @ (inOrden r))&amp;quot; by simp&lt;br /&gt;
  also have&amp;quot;... = rev (inOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu*)&lt;br /&gt;
lemma &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan juacanrod *) &lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 gleherlop hugrubsan cammonagu alfmarcua enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan juacanrod *)&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan juacanrod*)&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua enrparalv gleherlop chrgencar marfruman1 giafus1 pabbergue alikan juacanrod*)&lt;br /&gt;
lemma inOrdenNotNil: &amp;quot;inOrden a ≠ []&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;?P (N x i d) = ((inOrden i @ [x] @ inOrden d) ≠ [])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((inOrden i ≠ []) ∨ ([x] ≠ []) ∨ (inOrden d ≠ []))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = ([x] ≠ [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;last (inOrden (N x i d)) = last (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = last (x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden d)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha d&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have 1: &amp;quot;last (xs@ys) = last ys&amp;quot; if &amp;quot;ys ≠ []&amp;quot; for xs ys :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  proof (induction xs)&lt;br /&gt;
    case Nil&lt;br /&gt;
    show ?case by simp&lt;br /&gt;
  next&lt;br /&gt;
    case IS: (Cons x xs)&lt;br /&gt;
    have &amp;quot;last ((x#xs)@ys) = last (x#(xs@ys))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (xs @ ys)&amp;quot; using `ys ≠ []` by simp&lt;br /&gt;
    also have &amp;quot;... = last ys&amp;quot; using IS.IH by simp&lt;br /&gt;
    finally show ?case .&lt;br /&gt;
  qed&lt;br /&gt;
  have 2: &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  have &amp;quot;last (inOrden (N v l r)) = &lt;br /&gt;
        last ( (inOrden l) @ [v] @ (inOrden r) )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden r)&amp;quot; using 1 2 by auto&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha r&amp;quot; using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N v l r)&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan juacanrod *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (inOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (H x)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden (N x i d)) = hd (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = hd ((inOrden i @ [x]) @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (inOrden i)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda i&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  moreover have &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  ultimately show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 chrgencar giafus1 pabbergue alikan juacanrod *)&lt;br /&gt;
theorem hdPreOrden_lastPostOrden: &lt;br /&gt;
  &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a &lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (H x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp &lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x] &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x]) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (N x i d))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan juacanrod *)&lt;br /&gt;
theorem hdPreOrden_raiz: &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (([x] @ preOrden i) @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu alfmarcua marfruman1 gleherlop chrgencar giafus1 pabbergue juacanrod hugrubsan alikan*)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
  a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
  hd (inOrden a) = a⇩2&lt;br /&gt;
  raiz a = a⇩1 *)&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
(* El teorema no es cierto para arboles sobre numeros naturales *)&lt;br /&gt;
theorem &amp;quot;¬(∀ a :: nat arbol. hd (inOrden a) = raiz a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?a = &amp;quot;(N 0 (H 1) (H 2)) :: nat arbol&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden ?a) = 1&amp;quot; by simp&lt;br /&gt;
  moreover have &amp;quot;raiz ?a = 0&amp;quot; by simp&lt;br /&gt;
  ultimately have &amp;quot;hd (inOrden ?a) ≠ raiz ?a&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ a :: nat arbol. hd (inOrden a) ≠ raiz a&amp;quot; by (simp only: exI)&lt;br /&gt;
  thus ?thesis by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu marfruman1 gleherlop chrgencar giafus1 pabbergue juacanrod hugrubsan *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;last (postOrden a) = hd (preOrden a)&amp;quot;&lt;br /&gt;
    by (simp add: hdPreOrden_lastPostOrden)&lt;br /&gt;
  also have &amp;quot;... = raiz a&amp;quot; by (simp add: hdPreOrden_raiz)&lt;br /&gt;
  finally show &amp;quot;?thesis&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = &lt;br /&gt;
        last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;last (postOrden (H x)) = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=321</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=321"/>
		<updated>2019-01-31T12:29:06Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R5: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R5_Recorridos_de_arboles_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;preOrden (N x i d) = x # preOrden i @ preOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))  &lt;br /&gt;
      = [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;postOrden (N x i d) = postOrden i @ postOrden d @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;inOrden (N x i d) = inOrden i @ [x] @ inOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x)     = H x&amp;quot; |&lt;br /&gt;
  &amp;quot;espejo (N x i d) = N x (espejo d) (espejo i)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h))) &lt;br /&gt;
       = N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar pabbergue giafus1 alikan*)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N x i d)) = &lt;br /&gt;
        preOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # preOrden (espejo d) @ preOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # rev (postOrden d) @ rev (postOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden d @ [x]) @ rev (postOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N v l r)) = &lt;br /&gt;
        preOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = v # (preOrden (espejo r)) @ (preOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = v # rev (postOrden r) @ rev (postOrden l)&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((postOrden l) @ (postOrden r) @ [v])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
lemma &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) =&lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden i @ preOrden d) @ rev [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d &lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) = &lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (x # preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden i @ [x] @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a) &lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden(N x (espejo d) (espejo i))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # inOrden d) @ rev (inOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(inOrden i @ x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N v l r)) = &lt;br /&gt;
        inOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (inOrden (espejo r)) @ [v] @ (inOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (rev (inOrden r)) @ [v] @ (rev (inOrden l))&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((inOrden l) @ [v] @ (inOrden r))&amp;quot; by simp&lt;br /&gt;
  also have&amp;quot;... = rev (inOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu*)&lt;br /&gt;
lemma &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 gleherlop hugrubsan cammonagu alfmarcua enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua enrparalv gleherlop chrgencar marfruman1 giafus1 pabbergue alikan*)&lt;br /&gt;
lemma inOrdenNotNil: &amp;quot;inOrden a ≠ []&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;?P (N x i d) = ((inOrden i @ [x] @ inOrden d) ≠ [])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((inOrden i ≠ []) ∨ ([x] ≠ []) ∨ (inOrden d ≠ []))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = ([x] ≠ [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;last (inOrden (N x i d)) = last (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = last (x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden d)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha d&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have 1: &amp;quot;last (xs@ys) = last ys&amp;quot; if &amp;quot;ys ≠ []&amp;quot; for xs ys :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  proof (induction xs)&lt;br /&gt;
    case Nil&lt;br /&gt;
    show ?case by simp&lt;br /&gt;
  next&lt;br /&gt;
    case IS: (Cons x xs)&lt;br /&gt;
    have &amp;quot;last ((x#xs)@ys) = last (x#(xs@ys))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (xs @ ys)&amp;quot; using `ys ≠ []` by simp&lt;br /&gt;
    also have &amp;quot;... = last ys&amp;quot; using IS.IH by simp&lt;br /&gt;
    finally show ?case .&lt;br /&gt;
  qed&lt;br /&gt;
  have 2: &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  have &amp;quot;last (inOrden (N v l r)) = &lt;br /&gt;
        last ( (inOrden l) @ [v] @ (inOrden r) )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden r)&amp;quot; using 1 2 by auto&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha r&amp;quot; using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N v l r)&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (inOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (H x)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden (N x i d)) = hd (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = hd ((inOrden i @ [x]) @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (inOrden i)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda i&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  moreover have &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  ultimately show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem hdPreOrden_lastPostOrden: &lt;br /&gt;
  &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a &lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (H x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp &lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x] &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x]) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (N x i d))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem hdPreOrden_raiz: &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (([x] @ preOrden i) @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu alfmarcua marfruman1 gleherlop chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
  a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
  hd (inOrden a) = a⇩2&lt;br /&gt;
  raiz a = a⇩1 *)&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
(* El teorema no es cierto para arboles sobre numeros naturales *)&lt;br /&gt;
theorem &amp;quot;¬(∀ a :: nat arbol. hd (inOrden a) = raiz a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?a = &amp;quot;(N 0 (H 1) (H 2)) :: nat arbol&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden ?a) = 1&amp;quot; by simp&lt;br /&gt;
  moreover have &amp;quot;raiz ?a = 0&amp;quot; by simp&lt;br /&gt;
  ultimately have &amp;quot;hd (inOrden ?a) ≠ raiz ?a&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ a :: nat arbol. hd (inOrden a) ≠ raiz a&amp;quot; by (simp only: exI)&lt;br /&gt;
  thus ?thesis by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu marfruman1 gleherlop chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;last (postOrden a) = hd (preOrden a)&amp;quot;&lt;br /&gt;
    by (simp add: hdPreOrden_lastPostOrden)&lt;br /&gt;
  also have &amp;quot;... = raiz a&amp;quot; by (simp add: hdPreOrden_raiz)&lt;br /&gt;
  finally show &amp;quot;?thesis&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = &lt;br /&gt;
        last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;last (postOrden (H x)) = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=319</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=319"/>
		<updated>2019-01-31T11:10:35Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R5: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R5_Recorridos_de_arboles_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;preOrden (N x i d) = x # preOrden i @ preOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))  &lt;br /&gt;
      = [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;postOrden (N x i d) = postOrden i @ postOrden d @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;inOrden (N x i d) = inOrden i @ [x] @ inOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x)     = H x&amp;quot; |&lt;br /&gt;
  &amp;quot;espejo (N x i d) = N x (espejo d) (espejo i)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h))) &lt;br /&gt;
       = N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar pabbergue giafus1 alikan*)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N x i d)) = &lt;br /&gt;
        preOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # preOrden (espejo d) @ preOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # rev (postOrden d) @ rev (postOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden d @ [x]) @ rev (postOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N v l r)) = &lt;br /&gt;
        preOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = v # (preOrden (espejo r)) @ (preOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = v # rev (postOrden r) @ rev (postOrden l)&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((postOrden l) @ (postOrden r) @ [v])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
lemma &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) =&lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden i @ preOrden d) @ rev [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d &lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) = &lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (x # preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden i @ [x] @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a) &lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden(N x (espejo d) (espejo i))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # inOrden d) @ rev (inOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(inOrden i @ x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N v l r)) = &lt;br /&gt;
        inOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (inOrden (espejo r)) @ [v] @ (inOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (rev (inOrden r)) @ [v] @ (rev (inOrden l))&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((inOrden l) @ [v] @ (inOrden r))&amp;quot; by simp&lt;br /&gt;
  also have&amp;quot;... = rev (inOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu*)&lt;br /&gt;
lemma &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 gleherlop hugrubsan cammonagu alfmarcua enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua enrparalv gleherlop chrgencar marfruman1 giafus1 pabbergue alikan*)&lt;br /&gt;
lemma inOrdenNotNil: &amp;quot;inOrden a ≠ []&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;?P (N x i d) = ((inOrden i @ [x] @ inOrden d) ≠ [])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((inOrden i ≠ []) ∨ ([x] ≠ []) ∨ (inOrden d ≠ []))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = ([x] ≠ [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;last (inOrden (N x i d)) = last (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = last (x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden d)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha d&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have 1: &amp;quot;last (xs@ys) = last ys&amp;quot; if &amp;quot;ys ≠ []&amp;quot; for xs ys :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  proof (induction xs)&lt;br /&gt;
    case Nil&lt;br /&gt;
    show ?case by simp&lt;br /&gt;
  next&lt;br /&gt;
    case IS: (Cons x xs)&lt;br /&gt;
    have &amp;quot;last ((x#xs)@ys) = last (x#(xs@ys))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (xs @ ys)&amp;quot; using `ys ≠ []` by simp&lt;br /&gt;
    also have &amp;quot;... = last ys&amp;quot; using IS.IH by simp&lt;br /&gt;
    finally show ?case .&lt;br /&gt;
  qed&lt;br /&gt;
  have 2: &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  have &amp;quot;last (inOrden (N v l r)) = &lt;br /&gt;
        last ( (inOrden l) @ [v] @ (inOrden r) )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden r)&amp;quot; using 1 2 by auto&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha r&amp;quot; using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N v l r)&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue alikan*)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (inOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (H x)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden (N x i d)) = hd (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = hd ((inOrden i @ [x]) @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (inOrden i)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda i&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  moreover have &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  ultimately show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem hdPreOrden_lastPostOrden: &lt;br /&gt;
  &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a &lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (H x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp &lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x] &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x]) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (N x i d))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 &lt;br /&gt;
   chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem hdPreOrden_raiz: &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (([x] @ preOrden i) @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu alfmarcua marfruman1 gleherlop chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
  a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
  hd (inOrden a) = a⇩2&lt;br /&gt;
  raiz a = a⇩1 *)&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
(* El teorema no es cierto para arboles sobre numeros naturales *)&lt;br /&gt;
theorem &amp;quot;¬(∀ a :: nat arbol. hd (inOrden a) = raiz a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?a = &amp;quot;(N 0 (H 1) (H 2)) :: nat arbol&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden ?a) = 1&amp;quot; by simp&lt;br /&gt;
  moreover have &amp;quot;raiz ?a = 0&amp;quot; by simp&lt;br /&gt;
  ultimately have &amp;quot;hd (inOrden ?a) ≠ raiz ?a&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ a :: nat arbol. hd (inOrden a) ≠ raiz a&amp;quot; by (simp only: exI)&lt;br /&gt;
  thus ?thesis by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu marfruman1 gleherlop chrgencar giafus1 pabbergue *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;last (postOrden a) = hd (preOrden a)&amp;quot;&lt;br /&gt;
    by (simp add: hdPreOrden_lastPostOrden)&lt;br /&gt;
  also have &amp;quot;... = raiz a&amp;quot; by (simp add: hdPreOrden_raiz)&lt;br /&gt;
  finally show &amp;quot;?thesis&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = &lt;br /&gt;
        last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;last (postOrden (H x)) = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=307</id>
		<title>Relación 5</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_5&amp;diff=307"/>
		<updated>2019-01-30T13:06:45Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R5: Recorridos de árboles *}&lt;br /&gt;
&lt;br /&gt;
theory R5_Recorridos_de_arboles_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir el tipo de datos arbol para representar los&lt;br /&gt;
  árboles binarios que tiene información en los nodos y en las hojas. &lt;br /&gt;
  Por ejemplo, el árbol&lt;br /&gt;
          e&lt;br /&gt;
         / \&lt;br /&gt;
        /   \&lt;br /&gt;
       c     g&lt;br /&gt;
      / \   / \&lt;br /&gt;
     a   d f   h &lt;br /&gt;
  se representa por &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot;.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
datatype &amp;#039;a arbol = H &amp;quot;&amp;#039;a&amp;quot; | N &amp;quot;&amp;#039;a&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot; &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;N e (N c (H a) (H d)) (N g (H f) (H h))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (preOrden a) es el recorrido pre orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 alikan*) &lt;br /&gt;
fun preOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;preOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;preOrden (N x i d) = x # preOrden i @ preOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;preOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))  &lt;br /&gt;
      = [e,c,a,d,g,f,h]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3. Definir la función &lt;br /&gt;
     postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (postOrden a) es el recorrido post orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [e,c,a,d,g,f,h] &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 alikan*) &lt;br /&gt;
fun postOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;postOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;postOrden (N x i d) = postOrden i @ postOrden d @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;postOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,d,c,f,h,g,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función &lt;br /&gt;
     inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot;&lt;br /&gt;
  tal que (inOrden a) es el recorrido in orden del árbol a. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = [a,c,d,e,f,g,h]&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 alikan*) &lt;br /&gt;
fun inOrden :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inOrden (H x)     = [x]&amp;quot; |&lt;br /&gt;
  &amp;quot;inOrden (N x i d) = inOrden i @ [x] @ inOrden d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inOrden (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
       = [a,c,d,e,f,g,h]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función &lt;br /&gt;
     espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot;&lt;br /&gt;
  tal que (espejo a) es la imagen especular del árbol a. Por ejemplo, &lt;br /&gt;
     espejo (N e (N c (H a) (H d)) (N g (H f) (H h)))&lt;br /&gt;
     = N e (N g (H h) (H f)) (N c (H d) (H a))&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan gleherlop cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 chrgencar giafus1 alikan*) &lt;br /&gt;
fun espejo :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a arbol&amp;quot; where&lt;br /&gt;
  &amp;quot;espejo (H x)     = H x&amp;quot; |&lt;br /&gt;
  &amp;quot;espejo (N x i d) = N x (espejo d) (espejo i)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;espejo (N e (N c (H a) (H d)) (N g (H f) (H h))) &lt;br /&gt;
       = N e (N g (H h) (H f)) (N c (H d) (H a))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar que&lt;br /&gt;
     preOrden (espejo a) = rev (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 *)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N x i d)) = &lt;br /&gt;
        preOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # preOrden (espejo d) @ preOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x # rev (postOrden d) @ rev (postOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden d @ [x]) @ rev (postOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma  &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;preOrden (espejo (N v l r)) = &lt;br /&gt;
        preOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = v # (preOrden (espejo r)) @ (preOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = v # rev (postOrden r) @ rev (postOrden l)&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((postOrden l) @ (postOrden r) @ [v])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (postOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
lemma &amp;quot;preOrden (espejo a) = rev (postOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Demostrar que&lt;br /&gt;
     postOrden (espejo a) = rev (preOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) =&lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (preOrden i @ preOrden d) @ rev [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d &lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;postOrden (espejo (N x i d)) = &lt;br /&gt;
        postOrden (N x (espejo d) (espejo i))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = postOrden (espejo d) @ postOrden (espejo i) @ [x]&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (preOrden i) @ [x]&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(preOrden d) @ rev (x # preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
lemma &amp;quot;postOrden (espejo a) = rev (preOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Demostrar que&lt;br /&gt;
     inOrden (espejo a) = rev (inOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu enrparalv gleherlop chrgencar giafus1 *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot; and H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden (N x (espejo d) (espejo i))&amp;quot;&lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden i @ [x] @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* raffergon2 alfmarcua marfruman1 *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a) &lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume H1: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  assume H2: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N x i d)) = inOrden(N x (espejo d) (espejo i))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = inOrden (espejo d) @ [x] @ inOrden (espejo i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev (inOrden d) @ [x] @ rev (inOrden i)&amp;quot;&lt;br /&gt;
    using H1 H2 by simp&lt;br /&gt;
  also have &amp;quot;... = rev(x # inOrden d) @ rev (inOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = rev(inOrden i @ x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have &amp;quot;inOrden (espejo (N v l r)) = &lt;br /&gt;
        inOrden (N v (espejo r) (espejo l))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (inOrden (espejo r)) @ [v] @ (inOrden (espejo l))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (rev (inOrden r)) @ [v] @ (rev (inOrden l))&amp;quot; &lt;br /&gt;
    using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = rev ((inOrden l) @ [v] @ (inOrden r))&amp;quot; by simp&lt;br /&gt;
  also have&amp;quot;... = rev (inOrden (N v l r))&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* cammonagu*)&lt;br /&gt;
lemma &amp;quot;inOrden (espejo a) = rev (inOrden a)&amp;quot;&lt;br /&gt;
  by (induction a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función &lt;br /&gt;
     raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (raiz a) es la raiz del árbol a. Por ejemplo, &lt;br /&gt;
     raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 aribatval benber josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   alfmarcua enrparalv marfruman1 gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun raiz :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;raiz (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;raiz (N x i d) = x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;raiz (N e (N c (H a) (H d)) (N g (H f) (H h))) = e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función &lt;br /&gt;
     extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_izquierda a) es el nodo más a la izquierda del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 gleherlop hugrubsan cammonagu alfmarcua enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 *)&lt;br /&gt;
fun extremo_izquierda :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_izquierda (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_izquierda (N x i d) = extremo_izquierda i&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_izquierda (N e (N c (H a) (H d)) (N g (H f) (H h))) = a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función &lt;br /&gt;
     extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot;&lt;br /&gt;
  tal que (extremo_derecha a) es el nodo más a la derecha del árbol&lt;br /&gt;
  a. Por ejemplo,  &lt;br /&gt;
     extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim raffergon2 benber josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 *)&lt;br /&gt;
fun extremo_derecha :: &amp;quot;&amp;#039;a arbol ⇒ &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;extremo_derecha (H x)     = x&amp;quot; |&lt;br /&gt;
  &amp;quot;extremo_derecha (N x i d) = extremo_derecha d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;extremo_derecha (N e (N c (H a) (H d)) (N g (H f) (H h))) = h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Demostrar o refutar&lt;br /&gt;
     last (inOrden a) = extremo_derecha a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua enrparalv gleherlop chrgencar marfruman1 giafus1 *)&lt;br /&gt;
lemma inOrdenNotNil: &amp;quot;inOrden a ≠ []&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;?P (N x i d) = ((inOrden i @ [x] @ inOrden d) ≠ [])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((inOrden i ≠ []) ∨ ([x] ≠ []) ∨ (inOrden d ≠ []))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = ([x] ≠ [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P d&amp;quot;&lt;br /&gt;
  have &amp;quot;last (inOrden (N x i d)) = last (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = last (x # inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden d)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha d&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;last (inOrden a) = extremo_derecha a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  have 1: &amp;quot;last (xs@ys) = last ys&amp;quot; if &amp;quot;ys ≠ []&amp;quot; for xs ys :: &amp;quot;&amp;#039;a list&amp;quot;&lt;br /&gt;
  proof (induction xs)&lt;br /&gt;
    case Nil&lt;br /&gt;
    show ?case by simp&lt;br /&gt;
  next&lt;br /&gt;
    case IS: (Cons x xs)&lt;br /&gt;
    have &amp;quot;last ((x#xs)@ys) = last (x#(xs@ys))&amp;quot; by simp&lt;br /&gt;
    also have &amp;quot;... = last (xs @ ys)&amp;quot; using `ys ≠ []` by simp&lt;br /&gt;
    also have &amp;quot;... = last ys&amp;quot; using IS.IH by simp&lt;br /&gt;
    finally show ?case .&lt;br /&gt;
  qed&lt;br /&gt;
  have 2: &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  have &amp;quot;last (inOrden (N v l r)) = &lt;br /&gt;
        last ( (inOrden l) @ [v] @ (inOrden r) )&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (inOrden r)&amp;quot; using 1 2 by auto&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha r&amp;quot; using IS.IH by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_derecha (N v l r)&amp;quot; by simp&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = extremo_izquierda a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop enrparalv marfruman1 &lt;br /&gt;
   chrgencar giafus1 *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (inOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (H x)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  assume HI: &amp;quot;?P i&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden (N x i d)) = hd (inOrden i @ [x] @ inOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = hd ((inOrden i @ [x]) @ inOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (inOrden i)&amp;quot; by (simp add: inOrdenNotNil)&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda i&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = extremo_izquierda (N x i d)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = extremo_izquierda a&amp;quot;&lt;br /&gt;
proof (induction a)&lt;br /&gt;
  case (H v)&lt;br /&gt;
  show ?case by simp&lt;br /&gt;
next&lt;br /&gt;
  case IS: (N v l r)&lt;br /&gt;
  moreover have &amp;quot;inOrden a ≠ []&amp;quot; for a :: &amp;quot;&amp;#039;a arbol&amp;quot;&lt;br /&gt;
    by (induction a) auto&lt;br /&gt;
  ultimately show ?case by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 14. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = last (postOrden a)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 chrgencar giafus1 *)&lt;br /&gt;
theorem hdPreOrden_lastPostOrden: &lt;br /&gt;
  &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a &lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (H x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp &lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last [x] &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden i @ postOrden d @ [x]) &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = last (postOrden (N x i d))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = last (postOrden a)&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 15. Demostrar o refutar&lt;br /&gt;
     hd (preOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 hugrubsan cammonagu alfmarcua gleherlop marfruman1 &lt;br /&gt;
   chrgencar giafus1 *)&lt;br /&gt;
theorem hdPreOrden_raiz: &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd (x # preOrden i @ preOrden d)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;hd (preOrden (H x)) = hd [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x &amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;hd (preOrden (N x i d)) = hd ([x] @ preOrden i @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd (([x] @ preOrden i) @ preOrden d)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x] @ preOrden i)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = hd ([x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;hd (preOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 16. Demostrar o refutar&lt;br /&gt;
     hd (inOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim cammonagu alfmarcua marfruman1 gleherlop chrgencar giafus1 *)&lt;br /&gt;
theorem &amp;quot;hd (inOrden a) = raiz a&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
(*&lt;br /&gt;
Quickcheck found a counterexample:&lt;br /&gt;
  a = N a⇩1 (H a⇩2) (H a⇩1)&lt;br /&gt;
Evaluated terms:&lt;br /&gt;
  hd (inOrden a) = a⇩2&lt;br /&gt;
  raiz a = a⇩1 *)&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
(* El teorema no es cierto para arboles sobre numeros naturales *)&lt;br /&gt;
theorem &amp;quot;¬(∀ a :: nat arbol. hd (inOrden a) = raiz a)&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?a = &amp;quot;(N 0 (H 1) (H 2)) :: nat arbol&amp;quot;&lt;br /&gt;
  have &amp;quot;hd (inOrden ?a) = 1&amp;quot; by simp&lt;br /&gt;
  moreover have &amp;quot;raiz ?a = 0&amp;quot; by simp&lt;br /&gt;
  ultimately have &amp;quot;hd (inOrden ?a) ≠ raiz ?a&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ a :: nat arbol. hd (inOrden a) ≠ raiz a&amp;quot; by (simp only: exI)&lt;br /&gt;
  thus ?thesis by auto&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*  &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 17. Demostrar o refutar&lt;br /&gt;
     last (postOrden a) = raiz a&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon manperjim josgomrom4 cammonagu marfruman1 gleherlop chrgencar giafus1 *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;last (postOrden a) = hd (preOrden a)&amp;quot;&lt;br /&gt;
    by (simp add: hdPreOrden_lastPostOrden)&lt;br /&gt;
  also have &amp;quot;... = raiz a&amp;quot; by (simp add: hdPreOrden_raiz)&lt;br /&gt;
  finally show &amp;quot;?thesis&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber cammonagu*)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot;&lt;br /&gt;
  by (cases a) auto&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x&lt;br /&gt;
  show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  fix i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = &lt;br /&gt;
        last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
theorem &amp;quot;last (postOrden a) = raiz a&amp;quot; (is &amp;quot;?P a&amp;quot;)&lt;br /&gt;
proof (induct a)&lt;br /&gt;
  fix x::&amp;#039;a&lt;br /&gt;
  have &amp;quot;last (postOrden (H x)) = last [x]&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (H x)&amp;quot; by (simp only: raiz.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P (H x)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x i d&lt;br /&gt;
  have &amp;quot;last (postOrden (N x i d)) = last (postOrden i @ postOrden d @ [x])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = raiz (N x i d)&amp;quot; by (simp only: raiz.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (N x i d)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=306</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=306"/>
		<updated>2019-01-30T12:29:49Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R4: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R4_Cuantificadores_sobre_listas_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aribatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv gleherlop chrgencar benber giafus1 pabbergue &lt;br /&gt;
   alikan marfruman1 antramhur juacanrod*) &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu aribatval&lt;br /&gt;
   raffergon2 enrparalv gleherlop chrgencar benber giafus1 pabbergue&lt;br /&gt;
   alikan marfruman1 antramhur juacanrod *) &lt;br /&gt;
fun algunos  :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;algunos p [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;algunos p (x#xs) = (p x ∨ algunos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu raffergon2&lt;br /&gt;
   enrparalv gleherlop chrgencar benber giafus1 pabbergue alikan &lt;br /&gt;
   marfruman1 antramhur juacanrod*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P P Q xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  fix P Q&lt;br /&gt;
  show &amp;quot;?P P Q []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P P Q xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
        ((P a ∧ Q a) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ Q a ∧ todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P xs) ∧ (Q a ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp add: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#xs) ∧ (Q a ∧ todos Q xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
                (todos P (a#xs) ∧ todos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua juacanrod *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = (True)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (True ∧ True)&amp;quot; by (simp only: conj_absorb)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (x # xs) = &lt;br /&gt;
        ((P x ∧ Q x) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ Q x) ∧  (todos P xs ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ todos P xs) ∧ (Q x ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x # xs) ∧ todos Q (x # xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (x#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 cammonagu enrparalv gleherlop chrgencar giafus1&lt;br /&gt;
   pabbergue alikan marfruman1 antramhur*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos (λx. P x ∧ Q x) [] = (todos P [] ∧ todos Q [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n xs&lt;br /&gt;
  assume HI: &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (n # xs) =  &lt;br /&gt;
        ((P n ∧ Q n) ∧ (todos P xs ∧ todos Q xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P n ∧ todos P xs) ∧ (Q n ∧ todos Q xs))&amp;quot; by arith&lt;br /&gt;
  also have &amp;quot;... = ((todos P(n#xs)) ∧ (todos Q(n#xs)))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;todos (λx. P x ∧ Q x) (n#xs) = &lt;br /&gt;
               (todos P (n#xs) ∧ todos Q (n#xs))&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = True&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) conj_absorb)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos (λy. P y ∧ Q y) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λy. P y ∧ Q y) (x # xs) = &lt;br /&gt;
       ( (P x ∧ Q x) ∧ todos (λy. P y ∧ Q y) xs )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ Q x) ∧ todos P xs ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (Q x ∧ todos P xs) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (todos P xs ∧ Q x) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ todos P xs) ∧ Q x ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( todos P (x#xs) ∧ todos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Demostrar o refutar automáticamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aritbatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv benber gleherlop chrgencar giafus1 pabbergue&lt;br /&gt;
   alikan marfruman1 antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  by (induct x) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu enrparalv&lt;br /&gt;
   gleherlop chrgencar giafus1 pabbergue alikan antramhur juacanrod *) &lt;br /&gt;
lemma todos_append:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;todos P ([] @ y) = (todos P [] ∧ todos P y)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a#x) @ y) = (P a ∧ todos P (x @ y))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos P ((a#x) @ y) = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua marfruman1 *)&lt;br /&gt;
lemma todos_append_2:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  have &amp;quot;todos P ([] @ y) = todos P y&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (True ∧ todos P y)&amp;quot; by (simp only: simp_thms(22))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI:&amp;quot;?P x&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = todos P (a # (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P (x @ y))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P x) ∧ todos P y)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma todos_append_3:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x )&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos P ( [] @ y ) = todos P y&amp;quot; &lt;br /&gt;
    by (simp only: List.append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(22))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons a x)&lt;br /&gt;
  assume IH: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = (P a ∧ todos P (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2) List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_assoc )&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua aribatval cammonagu&lt;br /&gt;
   raffergon2 giafus1 pabbergue enrparalv alikan antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.conj_comms todos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber marfruman1*)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  using todos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu gleherlop giafus1&lt;br /&gt;
   pabbergue enrparalv marfruman1 alikan chrgencar antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a#xs)) = todos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; by (simp add: HOL.conj_comms)&lt;br /&gt;
  finally show &amp;quot;todos P (rev (a#xs)) = todos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a # xs)) = todos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#[]) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ True) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = todos P (a#xs)&amp;quot; by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (x#xs)) = todos P (rev xs @ [x])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x ∧ todos P [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  nitpick&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* Contraejemplo *)&lt;br /&gt;
value &amp;quot;algunos (λx. even x ∧ odd x) [1, 2::nat] ≠&lt;br /&gt;
  algunos even [1, 2::nat] ∧ algunos odd [1, 2::nat]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim alfmarcua raffergon2 gleherlop chrgencar cammonagu giafus1 pabbergue&lt;br /&gt;
   marfruman1 alikan antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber (demostración no completa) *)&lt;br /&gt;
fun is_zero :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_zero n = (n = 0)&amp;quot;&lt;br /&gt;
fun is_one :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_one n = (n = 1)&amp;quot;&lt;br /&gt;
lemma &amp;quot;¬( ∀P Q xs. algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs) )&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?P = is_one&lt;br /&gt;
  let ?Q = is_zero&lt;br /&gt;
  have &amp;quot;algunos (λx. ?P x ∧ ?Q x) [0,1] ≠ &lt;br /&gt;
       (algunos ?P [0,1] ∧ algunos ?Q [0,1])&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ xs. algunos (λx. ?P x ∧ ?Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos ?Q xs)&amp;quot; by (simp only: exI)&lt;br /&gt;
  hence &amp;quot;∃Q xs. algunos (λx. ?P x ∧ Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    by  (simp only: exI[of &amp;quot;λQ. ∃ xs. algunos (λx. ?P x ∧ Q x) xs ≠ (algunos ?P xs ∧ algunos Q xs)&amp;quot;])&lt;br /&gt;
  hence &amp;quot;∃P Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    (*&lt;br /&gt;
      No sé por qué esto no funciona:&lt;br /&gt;
      by (simp only: exI[of &amp;quot;λP Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot; ?P])&lt;br /&gt;
&lt;br /&gt;
      Parece que el problema es la expresión lambda.&lt;br /&gt;
    *)&lt;br /&gt;
    sorry&lt;br /&gt;
  thus ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop&lt;br /&gt;
   cammonagu benber giafus1 pabbergue enrparalv marfruman1 alikan antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu giafus1 gleherlop chrgencar pabbergue enrparalv&lt;br /&gt;
   marfruman1 alikan antramhur juacanrod *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P ∘ f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a#xs)) = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P ∘ f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P ∘ f) a ∨ algunos (P ∘ f) xs)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (a#xs)) = algunos (P ∘ f) (a#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P o f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x#xs)) = (P (f x) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f x) ∨ algunos (P o f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (x#xs)) = algunos (P o f) (x#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(1))&lt;br /&gt;
  also have &amp;quot;... =  algunos (P o f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a # xs)) =  algunos P (f a # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P o f) xs)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P o f) a ∨ algunos (P o f) xs)&amp;quot; &lt;br /&gt;
    by (simp only: Fun.comp_apply)&lt;br /&gt;
  also have &amp;quot;... = algunos (P o f) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; by (simp only: list.map(1))&lt;br /&gt;
  also have &amp;quot;... = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = algunos (P ∘ f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x # xs)) = algunos P (f x # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: list.map(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos P (map f xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) o_apply)&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos (P ∘ f) xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos (P ∘ f) (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop chrgencar benber giafus1 pabbergue enrparalv marfruman1 &lt;br /&gt;
   alikan antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 gleherlop cammonagu giafus1&lt;br /&gt;
   pabbergue enrparalv marfruman1 alikan antramhur juacanrod *) &lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P ([] @ ys) = (algunos P [] ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = (P a ∨ algunos P (xs @ ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show  &amp;quot;algunos P ((a#xs) @ ys) = &lt;br /&gt;
                 (algunos P (a#xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma algunos_append_2:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (False ∨ algunos P ys)&amp;quot; by (simp only: simp_thms(32))&lt;br /&gt;
  also have &amp;quot;... = (algunos P [] ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a # xs) @ ys) = algunos P (a # (xs @ ys))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P (xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ algunos P ys)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#xs) ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma algunos_append_3:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; &lt;br /&gt;
    by (simp only: append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(32))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (xs @ ys) = ( algunos P xs ∨ algunos P ys )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((x#xs) @ ys) = algunos P (x#(xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: append_Cons)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P (xs @ ys) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P xs ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop chrgencar &lt;br /&gt;
   cammonagu giafus1 pabbergue enrparalv alikan antramhur juacanrod *) &lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.disj_comms algunos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber marfruman1 *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  using algunos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon juacanrod *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a#xs)) = algunos P (rev xs @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a#xs)) = algunos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 gleherlop chrgencar cammonagu giafus1 pabbergue &lt;br /&gt;
   enrparalv marfruman1 alikan antramhur *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P (rev xs)) ∨ (algunos P [a]))&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ((algunos P xs) ∨ (algunos P [a]))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P [a]) ∨ (algunos P xs))&amp;quot; by arith&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#[]) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ False) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = algunos P (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show ?case by (simp only: algunos.simps(1) rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (x#xs)) = algunos P ( (rev xs) @ [x] )&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ algunos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x ∨ algunos P [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos P (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  y demostrar la equivalencia de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop chrgencar benber giafus1 enrparalv marfruman1 antramhur alikan*) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu pabbergue marfruman1 antramhur juacanrod alikan*)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos (λx. P x ∨ Q x) [] = (algunos P [] ∨ algunos Q [])&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos (λx. P x ∨ Q x) xs = &lt;br /&gt;
              (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
        (P a ∨ Q a ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ Q a ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
                (algunos P (a#xs) ∨ algunos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
      (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: algunos.simps(1) HOL.simp_thms(33))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a # xs) = &lt;br /&gt;
        ((P a ∨ Q a) ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ Q a) ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ Q a  ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_assoc HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) [] = False&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos Q [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  let ?R = &amp;quot;λx. P x ∨ Q x&amp;quot;&lt;br /&gt;
  assume IH: &amp;quot;algunos ?R xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos ?R (x#xs) = ( ?R x ∨ algunos ?R xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ Q x ∨ algunos P xs ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (Q x ∨ algunos P xs) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (algunos P xs ∨ Q x) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop chrgencar benber giafus1 pabbergue enrparalv marfruman1 antramhur juacanrod alikan*) &lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 cammonagu pabbergue enrparalv marfruman1 &lt;br /&gt;
   antramhur juacanrod alikan*)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P [] = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;(¬ todos (λx. (¬ P x)) (a#xs)) = &lt;br /&gt;
        (¬ ((¬ P a) ∧ todos (λx. (¬ P x)) xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a#xs) = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only:algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ True)&amp;quot; by (simp only: HOL.simp_thms(7))&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (¬ ¬ P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.simp_thms(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ (¬ P a ∧ todos (λx. (¬ P x)) xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (¬ todos (λx. ¬ P x) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) not_True_eq_False)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (x#xs) = ( P x ∨ algunos P xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (¬ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( ¬( ¬ P x ∧ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: not_not de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop chrgencar benber giafus1 pabbergue enrparalv marfruman1 antramhur juacanrod alikan*) &lt;br /&gt;
fun estaEn :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;estaEn x [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  Demostrar dicha relación de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua cammonagu gleherlop chrgencar benber&lt;br /&gt;
   giafus1 pabbergue marfruman1 antramhur juacanrod alikan*) &lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu marfruman1 antramhur *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn x [] = algunos (λa. x=a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix y xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (x=y ∨ algunos (λa. x=a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn x (y#xs) = algunos (λa. x=a) (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λk. x=k) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: estaEn.simps(1) algunos.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (a # xs) = (x=a ∨ estaEn x xs)&amp;quot; &lt;br /&gt;
    by (simp only: estaEn.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (x=a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only: HI)&lt;br /&gt;
  (* also have &amp;quot;... = ((λk. x=k) a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only:HOL.simp_thms(6)) *)&lt;br /&gt;
  also have &amp;quot;... = algunos (λk. x=k) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = (algunos (λy. y = x) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;estaEn x [] = False&amp;quot; by (simp only: estaEn.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (algunos (λy. y = x) [])&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons z xs)&lt;br /&gt;
  assume IH: &amp;quot;estaEn x xs = algunos (λy. y = x) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (z#xs) = ( z = x ∨ estaEn x xs )&amp;quot; by force&lt;br /&gt;
  also have &amp;quot;... = ( z = x ∨ algunos (λy. y = x) xs)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (algunos (λy. y = x) (z#xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=257</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=257"/>
		<updated>2019-01-17T11:41:19Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R4: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R4_Cuantificadores_sobre_listas_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aribatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv gleherlop benber giafus1 pabbergue alikan marfruman1*) &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu aribatval&lt;br /&gt;
   raffergon2 enrparalv gleherlop benber giafus1 pabbergue alikan marfruman1*) &lt;br /&gt;
fun algunos  :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;algunos p [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;algunos p (x#xs) = (p x ∨ algunos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu raffergon2&lt;br /&gt;
   enrparalv gleherlop benber giafus1 pabbergue alikan marfruman1*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P P Q xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  fix P Q&lt;br /&gt;
  show &amp;quot;?P P Q []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P P Q xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
        ((P a ∧ Q a) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ Q a ∧ todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P xs) ∧ (Q a ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp add: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#xs) ∧ (Q a ∧ todos Q xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
                (todos P (a#xs) ∧ todos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = (True)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (True ∧ True)&amp;quot; by (simp only: conj_absorb)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (x # xs) = &lt;br /&gt;
        ((P x ∧ Q x) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ Q x) ∧  (todos P xs ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ todos P xs) ∧ (Q x ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x # xs) ∧ todos Q (x # xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (x#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 cammonagu enrparalv gleherlop giafus1&lt;br /&gt;
   pabbergue alikan marfruman1*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos (λx. P x ∧ Q x) [] = (todos P [] ∧ todos Q [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n xs&lt;br /&gt;
  assume HI: &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (n # xs) =  &lt;br /&gt;
        ((P n ∧ Q n) ∧ (todos P xs ∧ todos Q xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P n ∧ todos P xs) ∧ (Q n ∧ todos Q xs))&amp;quot; by arith&lt;br /&gt;
  also have &amp;quot;... = ((todos P(n#xs)) ∧ (todos Q(n#xs)))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;todos (λx. P x ∧ Q x) (n#xs) = &lt;br /&gt;
               (todos P (n#xs) ∧ todos Q (n#xs))&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = True&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) conj_absorb)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos (λy. P y ∧ Q y) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λy. P y ∧ Q y) (x # xs) = &lt;br /&gt;
       ( (P x ∧ Q x) ∧ todos (λy. P y ∧ Q y) xs )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ Q x) ∧ todos P xs ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (Q x ∧ todos P xs) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (todos P xs ∧ Q x) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ todos P xs) ∧ Q x ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( todos P (x#xs) ∧ todos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Demostrar o refutar automáticamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aritbatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv benber gleherlop giafus1 pabbergue alikan marfruman1*) &lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  by (induct x) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu enrparalv&lt;br /&gt;
   gleherlop giafus1 pabbergue alikan*) &lt;br /&gt;
lemma todos_append:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;todos P ([] @ y) = (todos P [] ∧ todos P y)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a#x) @ y) = (P a ∧ todos P (x @ y))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos P ((a#x) @ y) = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua marfruman1 *)&lt;br /&gt;
lemma todos_append_2:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  have &amp;quot;todos P ([] @ y) = todos P y&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (True ∧ todos P y)&amp;quot; by (simp only: simp_thms(22))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI:&amp;quot;?P x&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = todos P (a # (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P (x @ y))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P x) ∧ todos P y)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma todos_append_3:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x )&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos P ( [] @ y ) = todos P y&amp;quot; &lt;br /&gt;
    by (simp only: List.append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(22))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons a x)&lt;br /&gt;
  assume IH: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = (P a ∧ todos P (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2) List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_assoc )&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua aribatval cammonagu&lt;br /&gt;
   raffergon2 giafus1 pabbergue enrparalv alikan*) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.conj_comms todos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber marfruman1*)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  using todos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu gleherlop giafus1&lt;br /&gt;
   pabbergue enrparalv marfruman1 alikan*) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a#xs)) = todos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; by (simp add: HOL.conj_comms)&lt;br /&gt;
  finally show &amp;quot;todos P (rev (a#xs)) = todos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a # xs)) = todos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#[]) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ True) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = todos P (a#xs)&amp;quot; by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (x#xs)) = todos P (rev xs @ [x])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x ∧ todos P [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  nitpick&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* Contraejemplo *)&lt;br /&gt;
value &amp;quot;algunos (λx. even x ∧ odd x) [1, 2::nat] ≠&lt;br /&gt;
  algunos even [1, 2::nat] ∧ algunos odd [1, 2::nat]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim alfmarcua raffergon2 gleherlop cammonagu giafus1 pabbergue marfruman1 alikan*) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber (demostración no completa) *)&lt;br /&gt;
fun is_zero :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_zero n = (n = 0)&amp;quot;&lt;br /&gt;
fun is_one :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_one n = (n = 1)&amp;quot;&lt;br /&gt;
lemma &amp;quot;¬( ∀P Q xs. algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs) )&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?P = is_one&lt;br /&gt;
  let ?Q = is_zero&lt;br /&gt;
  have &amp;quot;algunos (λx. ?P x ∧ ?Q x) [0,1] ≠ &lt;br /&gt;
       (algunos ?P [0,1] ∧ algunos ?Q [0,1])&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ xs. algunos (λx. ?P x ∧ ?Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos ?Q xs)&amp;quot; by (simp only: exI)&lt;br /&gt;
  hence &amp;quot;∃Q xs. algunos (λx. ?P x ∧ Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    by  (simp only: exI[of &amp;quot;λQ. ∃ xs. algunos (λx. ?P x ∧ Q x) xs ≠ (algunos ?P xs ∧ algunos Q xs)&amp;quot;])&lt;br /&gt;
  hence &amp;quot;∃P Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    (*&lt;br /&gt;
      No sé por qué esto no funciona:&lt;br /&gt;
      by (simp only: exI[of &amp;quot;λP Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot; ?P])&lt;br /&gt;
&lt;br /&gt;
      Parece que el problema es la expresión lambda.&lt;br /&gt;
    *)&lt;br /&gt;
    sorry&lt;br /&gt;
  thus ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop&lt;br /&gt;
   cammonagu benber giafus1 pabbergue enrparalv marfruman1 alikan*) &lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu giafus1 pabbergue enrparalv marfruman1 alikan*)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P ∘ f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a#xs)) = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P ∘ f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P ∘ f) a ∨ algunos (P ∘ f) xs)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (a#xs)) = algunos (P ∘ f) (a#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P o f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x#xs)) = (P (f x) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f x) ∨ algunos (P o f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (x#xs)) = algunos (P o f) (x#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(1))&lt;br /&gt;
  also have &amp;quot;... =  algunos (P o f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a # xs)) =  algunos P (f a # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P o f) xs)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P o f) a ∨ algunos (P o f) xs)&amp;quot; &lt;br /&gt;
    by (simp only: Fun.comp_apply)&lt;br /&gt;
  also have &amp;quot;... = algunos (P o f) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; by (simp only: list.map(1))&lt;br /&gt;
  also have &amp;quot;... = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = algunos (P ∘ f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x # xs)) = algunos P (f x # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: list.map(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos P (map f xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) o_apply)&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos (P ∘ f) xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos (P ∘ f) (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue enrparalv marfruman1 alikan*) &lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 gleherlop cammonagu giafus1&lt;br /&gt;
   pabbergue enrparalv marfruman1 alikan*) &lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P ([] @ ys) = (algunos P [] ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = (P a ∨ algunos P (xs @ ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show  &amp;quot;algunos P ((a#xs) @ ys) = &lt;br /&gt;
                 (algunos P (a#xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma algunos_append_2:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (False ∨ algunos P ys)&amp;quot; by (simp only: simp_thms(32))&lt;br /&gt;
  also have &amp;quot;... = (algunos P [] ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a # xs) @ ys) = algunos P (a # (xs @ ys))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P (xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ algunos P ys)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#xs) ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma algunos_append_3:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; &lt;br /&gt;
    by (simp only: append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(32))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (xs @ ys) = ( algunos P xs ∨ algunos P ys )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((x#xs) @ ys) = algunos P (x#(xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: append_Cons)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P (xs @ ys) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P xs ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop&lt;br /&gt;
   cammonagu giafus1 pabbergue enrparalv alikan*) &lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.disj_comms algunos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber marfruman1 *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  using algunos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a#xs)) = algunos P (rev xs @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a#xs)) = algunos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 gleherlop cammonagu giafus1 pabbergue enrparalv marfruman1 alikan*)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P (rev xs)) ∨ (algunos P [a]))&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ((algunos P xs) ∨ (algunos P [a]))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P [a]) ∨ (algunos P xs))&amp;quot; by arith&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#[]) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ False) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = algunos P (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show ?case by (simp only: algunos.simps(1) rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (x#xs)) = algunos P ( (rev xs) @ [x] )&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ algunos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x ∨ algunos P [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos P (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  y demostrar la equivalencia de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 enrparalv marfruman1 *) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu pabbergue marfruman1 *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos (λx. P x ∨ Q x) [] = (algunos P [] ∨ algunos Q [])&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos (λx. P x ∨ Q x) xs = &lt;br /&gt;
              (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
        (P a ∨ Q a ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ Q a ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
                (algunos P (a#xs) ∨ algunos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
      (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: algunos.simps(1) HOL.simp_thms(33))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a # xs) = &lt;br /&gt;
        ((P a ∨ Q a) ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ Q a) ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ Q a  ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_assoc HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) [] = False&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos Q [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  let ?R = &amp;quot;λx. P x ∨ Q x&amp;quot;&lt;br /&gt;
  assume IH: &amp;quot;algunos ?R xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos ?R (x#xs) = ( ?R x ∨ algunos ?R xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ Q x ∨ algunos P xs ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (Q x ∨ algunos P xs) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (algunos P xs ∨ Q x) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue enrparalv marfruman1*) &lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 cammonagu pabbergue enrparalv marfruman1 *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P [] = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;(¬ todos (λx. (¬ P x)) (a#xs)) = &lt;br /&gt;
        (¬ ((¬ P a) ∧ todos (λx. (¬ P x)) xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a#xs) = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only:algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ True)&amp;quot; by (simp only: HOL.simp_thms(7))&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (¬ ¬ P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.simp_thms(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ (¬ P a ∧ todos (λx. (¬ P x)) xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (¬ todos (λx. ¬ P x) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) not_True_eq_False)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (x#xs) = ( P x ∨ algunos P xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (¬ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( ¬( ¬ P x ∧ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: not_not de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue enrparalv marfruman1 *) &lt;br /&gt;
fun estaEn :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;estaEn x [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  Demostrar dicha relación de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua cammonagu gleherlop benber&lt;br /&gt;
   giafus1 pabbergue marfruman1 *) &lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu marfruman1 *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn x [] = algunos (λa. x=a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix y xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (x=y ∨ algunos (λa. x=a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn x (y#xs) = algunos (λa. x=a) (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λk. x=k) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: estaEn.simps(1) algunos.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (a # xs) = (x=a ∨ estaEn x xs)&amp;quot; &lt;br /&gt;
    by (simp only: estaEn.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (x=a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only: HI)&lt;br /&gt;
  (* also have &amp;quot;... = ((λk. x=k) a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only:HOL.simp_thms(6)) *)&lt;br /&gt;
  also have &amp;quot;... = algunos (λk. x=k) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = (algunos (λy. y = x) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;estaEn x [] = False&amp;quot; by (simp only: estaEn.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (algunos (λy. y = x) [])&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons z xs)&lt;br /&gt;
  assume IH: &amp;quot;estaEn x xs = algunos (λy. y = x) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (z#xs) = ( z = x ∨ estaEn x xs )&amp;quot; by force&lt;br /&gt;
  also have &amp;quot;... = ( z = x ∨ algunos (λy. y = x) xs)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (algunos (λy. y = x) (z#xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=242</id>
		<title>Relación 4</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_4&amp;diff=242"/>
		<updated>2019-01-13T18:59:29Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R4: Cuantificadores sobre listas *}&lt;br /&gt;
&lt;br /&gt;
theory R4_Cuantificadores_sobre_listas_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1. Definir la función &lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     todos (λx. 1&amp;lt;length x) [[2,1,4],[1,3]]&lt;br /&gt;
     ¬todos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
&lt;br /&gt;
  Nota: La función todos es equivalente a la predefinida list_all. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aribatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv gleherlop benber giafus1 pabbergue alikan*) &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función &lt;br /&gt;
     algunos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (algunos p xs) se verifica si algunos elementos de la lista &lt;br /&gt;
  xs cumplen la propiedad p. Por ejemplo, se verifica &lt;br /&gt;
     algunos (λx. 1&amp;lt;length x) [[2,1,4],[3]]&lt;br /&gt;
     ¬algunos (λx. 1&amp;lt;length x) [[],[3]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Nota: La función algunos es equivalente a la predefinida list_ex. &lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu aribatval&lt;br /&gt;
   raffergon2 enrparalv gleherlop benber giafus1 pabbergue alikan*) &lt;br /&gt;
fun algunos  :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;algunos p [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;algunos p (x#xs) = (p x ∨ algunos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 cammonagu raffergon2&lt;br /&gt;
   enrparalv gleherlop benber giafus1 pabbergue alikan*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P P Q xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  fix P Q&lt;br /&gt;
  show &amp;quot;?P P Q []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;?P P Q xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
        ((P a ∧ Q a) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ Q a ∧ todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P xs) ∧ (Q a ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp add: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#xs) ∧ (Q a ∧ todos Q xs))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λx. P x ∧ Q x) (a#xs) = &lt;br /&gt;
                (todos P (a#xs) ∧ todos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = (True)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (True ∧ True)&amp;quot; by (simp only: conj_absorb)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (x # xs) = &lt;br /&gt;
        ((P x ∧ Q x) ∧ todos (λx. P x ∧ Q x) xs)&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ Q x) ∧  (todos P xs ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P x ∧ todos P xs) ∧ (Q x ∧ todos Q xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x # xs) ∧ todos Q (x # xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (x#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 cammonagu enrparalv gleherlop giafus1&lt;br /&gt;
   pabbergue alikan*) &lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos (λx. P x ∧ Q x) [] = (todos P [] ∧ todos Q [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n xs&lt;br /&gt;
  assume HI: &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot; &lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) (n # xs) =  &lt;br /&gt;
        ((P n ∧ Q n) ∧ (todos P xs ∧ todos Q xs))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P n ∧ todos P xs) ∧ (Q n ∧ todos Q xs))&amp;quot; by arith&lt;br /&gt;
  also have &amp;quot;... = ((todos P(n#xs)) ∧ (todos Q(n#xs)))&amp;quot; by simp&lt;br /&gt;
 finally show &amp;quot;todos (λx. P x ∧ Q x) (n#xs) = &lt;br /&gt;
               (todos P (n#xs) ∧ todos Q (n#xs))&amp;quot; by simp &lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos (λx. P x ∧ Q x) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos (λx. P x ∧ Q x) [] = True&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos Q [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) conj_absorb)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos (λy. P y ∧ Q y) xs = (todos P xs ∧ todos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λy. P y ∧ Q y) (x # xs) = &lt;br /&gt;
       ( (P x ∧ Q x) ∧ todos (λy. P y ∧ Q y) xs )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ Q x) ∧ todos P xs ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (Q x ∧ todos P xs) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∧ (todos P xs ∧ Q x) ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( (P x ∧ todos P xs) ∧ Q x ∧ todos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( todos P (x#xs) ∧ todos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Demostrar o refutar automáticamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon alfmarcua josgomrom4 aritbatval cammonagu&lt;br /&gt;
   raffergon2 enrparalv benber gleherlop giafus1 pabbergue alikan*) &lt;br /&gt;
lemma &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  by (induct x) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (x @ y) = (todos P x ∧ todos P y)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu enrparalv&lt;br /&gt;
   gleherlop giafus1 pabbergue *) &lt;br /&gt;
lemma todos_append:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  show &amp;quot;todos P ([] @ y) = (todos P [] ∧ todos P y)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a#x) @ y) = (P a ∧ todos P (x @ y))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;todos P ((a#x) @ y) = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma todos_append_2:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot; (is &amp;quot;?P x&amp;quot;)&lt;br /&gt;
proof (induct x)&lt;br /&gt;
  have &amp;quot;todos P ([] @ y) = todos P y&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (True ∧ todos P y)&amp;quot; by (simp only: simp_thms(22))&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a x&lt;br /&gt;
  assume HI:&amp;quot;?P x&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = todos P (a # (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P (x @ y))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ todos P x) ∧ todos P y)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.conj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma todos_append_3:&lt;br /&gt;
  &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
proof (induct x )&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;todos P ( [] @ y ) = todos P y&amp;quot; &lt;br /&gt;
    by (simp only: List.append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = (todos P [] ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(22))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons a x)&lt;br /&gt;
  assume IH: &amp;quot;todos P (x @ y) = (todos P x ∧ todos P y)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P ((a # x) @ y) = (P a ∧ todos P (x @ y))&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2) List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P x ∧ todos P y)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#x) ∧ todos P y)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_assoc )&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.1. Demostrar o refutar automáticamente &lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua aribatval cammonagu&lt;br /&gt;
   raffergon2 giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.conj_comms todos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  using todos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.2. Demostrar o refutar detalladamente&lt;br /&gt;
     todos P (rev xs) = todos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 cammonagu gleherlop giafus1&lt;br /&gt;
   pabbergue *) &lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a#xs)) = todos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot; by (simp add: HOL.conj_comms)&lt;br /&gt;
  finally show &amp;quot;todos P (rev (a#xs)) = todos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (a # xs)) = todos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ todos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (todos P (a#[]) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.conj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∧ True) ∧ todos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∧ todos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = todos P (a#xs)&amp;quot; by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show &amp;quot;todos P (rev []) = todos P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;todos P (rev xs) = todos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;todos P (rev (x#xs)) = todos P (rev xs @ [x])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ todos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: todos_append)&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x ∧ todos P [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (todos P (rev xs) ∧ P x)&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) simp_thms(21))&lt;br /&gt;
  also have &amp;quot;... = (todos P xs ∧ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (todos P (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2) conj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Demostrar o refutar:&lt;br /&gt;
    algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  nitpick&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* Contraejemplo *)&lt;br /&gt;
value &amp;quot;algunos (λx. even x ∧ odd x) [1, 2::nat] ≠&lt;br /&gt;
  algunos even [1, 2::nat] ∧ algunos odd [1, 2::nat]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim alfmarcua raffergon2 gleherlop cammonagu giafus1 pabbergue&lt;br /&gt;
*) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
  quickcheck&lt;br /&gt;
  oops&lt;br /&gt;
&lt;br /&gt;
(* benber (demostración no completa) *)&lt;br /&gt;
fun is_zero :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_zero n = (n = 0)&amp;quot;&lt;br /&gt;
fun is_one :: &amp;quot;nat ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;is_one n = (n = 1)&amp;quot;&lt;br /&gt;
lemma &amp;quot;¬( ∀P Q xs. algunos (λx. P x ∧ Q x) xs = (algunos P xs ∧ algunos Q xs) )&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  let ?P = is_one&lt;br /&gt;
  let ?Q = is_zero&lt;br /&gt;
  have &amp;quot;algunos (λx. ?P x ∧ ?Q x) [0,1] ≠ &lt;br /&gt;
       (algunos ?P [0,1] ∧ algunos ?Q [0,1])&amp;quot; by simp&lt;br /&gt;
  hence &amp;quot;∃ xs. algunos (λx. ?P x ∧ ?Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos ?Q xs)&amp;quot; by (simp only: exI)&lt;br /&gt;
  hence &amp;quot;∃Q xs. algunos (λx. ?P x ∧ Q x) xs ≠ &lt;br /&gt;
         (algunos ?P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    by  (simp only: exI[of &amp;quot;λQ. ∃ xs. algunos (λx. ?P x ∧ Q x) xs ≠ (algunos ?P xs ∧ algunos Q xs)&amp;quot;])&lt;br /&gt;
  hence &amp;quot;∃P Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot;&lt;br /&gt;
    (*&lt;br /&gt;
      No sé por qué esto no funciona:&lt;br /&gt;
      by (simp only: exI[of &amp;quot;λP Q xs. algunos (λx. P x ∧ Q x) xs ≠ (algunos P xs ∧ algunos Q xs)&amp;quot; ?P])&lt;br /&gt;
&lt;br /&gt;
      Parece que el problema es la expresión lambda.&lt;br /&gt;
    *)&lt;br /&gt;
    sorry&lt;br /&gt;
  thus ?thesis by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop&lt;br /&gt;
   cammonagu benber giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (map f xs) = algunos (P ∘ f) xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu giafus1 pabbergue *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P ∘ f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a#xs)) = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P ∘ f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((P ∘ f) a ∨ algunos (P ∘ f) xs)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (a#xs)) = algunos (P ∘ f) (a#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (map f []) = algunos (P o f) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x#xs)) = (P (f x) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
  also have &amp;quot;... = (P (f x) ∨ algunos (P o f) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (map f (x#xs)) = algunos (P o f) (x#xs)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(1))&lt;br /&gt;
  also have &amp;quot;... =  algunos (P o f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (a # xs)) =  algunos P (f a # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: List.list.map(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos P (map f xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P (f a) ∨ algunos (P o f) xs)&amp;quot; by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P o f) a ∨ algunos (P o f) xs)&amp;quot; &lt;br /&gt;
    by (simp only: Fun.comp_apply)&lt;br /&gt;
  also have &amp;quot;... = algunos (P o f) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (map f xs) = algunos (P o f) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P (map f []) = algunos P []&amp;quot; by (simp only: list.map(1))&lt;br /&gt;
  also have &amp;quot;... = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = algunos (P ∘ f) []&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (map f xs) = algunos (P ∘ f) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (map f (x # xs)) = algunos P (f x # map f xs)&amp;quot; &lt;br /&gt;
    by (simp only: list.map(2))&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos P (map f xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) o_apply)&lt;br /&gt;
  also have &amp;quot;... = ( (P ∘ f) x ∨ algunos (P ∘ f) xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos (P ∘ f) (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.1. Demostrar o refutar automáticamente &lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 raffergon2 gleherlop cammonagu giafus1&lt;br /&gt;
   pabbergue *) &lt;br /&gt;
lemma algunos_append:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P ([] @ ys) = (algunos P [] ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a#xs) @ ys) = (P a ∨ algunos P (xs @ ys))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; using HI by simp&lt;br /&gt;
  finally show  &amp;quot;algunos P ((a#xs) @ ys) = &lt;br /&gt;
                 (algunos P (a#xs) ∨ algunos P ys)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma algunos_append_2:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; by (simp only: append_Nil)&lt;br /&gt;
  also have &amp;quot;... = (False ∨ algunos P ys)&amp;quot; by (simp only: simp_thms(32))&lt;br /&gt;
  also have &amp;quot;... = (algunos P [] ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((a # xs) @ ys) = algunos P (a # (xs @ ys))&amp;quot;&lt;br /&gt;
    by (simp only:List.append.append_Cons)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P (xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only:HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ algunos P ys)&amp;quot;  &lt;br /&gt;
    by (simp only:HOL.disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#xs) ∨ algunos P ys)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma algunos_append_3:&lt;br /&gt;
  &amp;quot;algunos P (xs @ ys) = (algunos P xs ∨ algunos P ys)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P ([] @ ys) = algunos P ys&amp;quot; &lt;br /&gt;
    by (simp only: append.left_neutral)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(32))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (xs @ ys) = ( algunos P xs ∨ algunos P ys )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P ((x#xs) @ ys) = algunos P (x#(xs @ ys))&amp;quot; &lt;br /&gt;
    by (simp only: append_Cons)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P (xs @ ys) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ algunos P xs ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos P ys )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 gleherlop&lt;br /&gt;
   cammonagu giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  by (induct xs) (simp_all add: HOL.disj_comms algunos_append)&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  using algunos_append by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P (rev xs) = algunos P xs&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a#xs)) = algunos P (rev xs @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P a)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a#xs)) = algunos P (a#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim josgomrom4 raffergon2 gleherlop cammonagu giafus1 pabbergue *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos P (rev []) = algunos P []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P ((rev xs) @ [a])&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P (rev xs)) ∨ (algunos P [a]))&amp;quot; &lt;br /&gt;
    by (simp add: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ((algunos P xs) ∨ (algunos P [a]))&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = ((algunos P [a]) ∨ (algunos P xs))&amp;quot; by arith&lt;br /&gt;
  finally show &amp;quot;algunos P (rev (a # xs)) = algunos P (a # xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (a # xs)) = algunos P (rev xs @ [a])&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (algunos P (rev xs) ∨ algunos P [a])&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ algunos P [a])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a#[]) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ False) ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps)&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot;  &lt;br /&gt;
    by (simp only: HOL.simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = algunos P (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  show ?case by (simp only: algunos.simps(1) rev.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P (rev xs) = algunos P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (rev (x#xs)) = algunos P ( (rev xs) @ [x] )&amp;quot; &lt;br /&gt;
    by (simp only: rev.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ algunos P [x] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos_append)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x ∨ algunos P [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (rev xs) ∨ P x )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  also have &amp;quot;... = (algunos P xs ∨ P x)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = algunos P (x#xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_commute)&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Encontrar un término no trivial Z tal que sea cierta la &lt;br /&gt;
  siguiente ecuación:&lt;br /&gt;
     algunos (λx. P x ∨ Q x) xs = Z&lt;br /&gt;
  y demostrar la equivalencia de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 *) &lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu pabbergue *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;algunos (λx. P x ∨ Q x) [] = (algunos P [] ∨ algunos Q [])&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos (λx. P x ∨ Q x) xs = &lt;br /&gt;
              (algunos P xs ∨ algunos Q xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
        (P a ∨ Q a ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ Q a ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs ∨ Q a ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp add: HOL.disj_comms)&lt;br /&gt;
  finally show &amp;quot;algunos (λx. P x ∨ Q x) (a#xs) = &lt;br /&gt;
                (algunos P (a#xs) ∨ algunos Q (a#xs))&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = (algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
      (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: algunos.simps(1) HOL.simp_thms(33))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) (a # xs) = &lt;br /&gt;
        ((P a ∨ Q a) ∨ algunos (λx. P x ∨ Q x) xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ Q a) ∨ algunos P xs ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = ((P a ∨ algunos P xs) ∨ Q a  ∨ algunos Q xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.disj_assoc HOL.disj_comms)&lt;br /&gt;
  also have &amp;quot;... = (algunos P (a # xs) ∨ algunos Q (a # xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos (λx. P x ∨ Q x) xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos (λx. P x ∨ Q x) [] = False&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = ( algunos P [] ∨ algunos Q [] )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1) simp_thms(31))&lt;br /&gt;
  finally show ?case.&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  let ?R = &amp;quot;λx. P x ∨ Q x&amp;quot;&lt;br /&gt;
  assume IH: &amp;quot;algunos ?R xs = ( algunos P xs ∨ algunos Q xs )&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos ?R (x#xs) = ( ?R x ∨ algunos ?R xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ Q x ∨ algunos P xs ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: IH disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (Q x ∨ algunos P xs) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_assoc)&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (algunos P xs ∨ Q x) ∨ algunos Q xs )&amp;quot; &lt;br /&gt;
    by (simp only: disj_commute)&lt;br /&gt;
  also have &amp;quot;... = ( algunos P (x#xs) ∨ algunos Q (x#xs) )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2) disj_assoc)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.1. Demostrar o refutar automáticamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11.2. Demostrar o refutar detalladamente&lt;br /&gt;
     algunos P xs = (¬ todos (λx. (¬ P x)) xs)&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 cammonagu pabbergue *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;algunos P [] = (¬ todos (λx. (¬ P x)) [])&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;(¬ todos (λx. (¬ P x)) (a#xs)) = &lt;br /&gt;
        (¬ ((¬ P a) ∧ todos (λx. (¬ P x)) xs))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ algunos P xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;algunos P (a#xs) = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only:algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ True)&amp;quot; by (simp only: HOL.simp_thms(7))&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;?P []&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (a # xs) = (P a ∨ algunos P xs)&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (¬ ¬ P a ∨ ¬ todos (λx. (¬ P x)) xs)&amp;quot; &lt;br /&gt;
    by (simp only: HOL.simp_thms(1))&lt;br /&gt;
  also have &amp;quot;... = (¬ (¬ P a ∧ todos (λx. (¬ P x)) xs))&amp;quot; &lt;br /&gt;
    by (simp only: HOL.de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (a#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;algunos P [] = False&amp;quot; by (simp only: algunos.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (¬ todos (λx. ¬ P x) [])&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(1) not_True_eq_False)&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons x xs)&lt;br /&gt;
  assume IH: &amp;quot;algunos P xs = (¬ todos (λx. (¬ P x)) xs)&amp;quot;&lt;br /&gt;
  have &amp;quot;algunos P (x#xs) = ( P x ∨ algunos P xs )&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( P x ∨ (¬ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = ( ¬( ¬ P x ∧ todos (λx. (¬ P x)) xs) )&amp;quot; &lt;br /&gt;
    by (simp only: not_not de_Morgan_conj)&lt;br /&gt;
  also have &amp;quot;... = (¬ todos (λx. (¬ P x)) (x#xs))&amp;quot; &lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
     &lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 12. Definir la funcion primitiva recursiva &lt;br /&gt;
     estaEn :: &amp;#039;a ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (estaEn x xs) se verifica si el elemento x está en la lista&lt;br /&gt;
  xs. Por ejemplo, &lt;br /&gt;
     estaEn (2::nat) [3,2,4] = True&lt;br /&gt;
     estaEn (1::nat) [3,2,4] = False&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua raffergon2 cammonagu&lt;br /&gt;
   gleherlop benber giafus1 pabbergue *) &lt;br /&gt;
fun estaEn :: &amp;quot;&amp;#039;a ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;estaEn x [] = False&amp;quot; |&lt;br /&gt;
  &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {*&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 13. Expresar la relación existente entre estaEn y algunos. &lt;br /&gt;
  Demostrar dicha relación de forma automática y detallada.&lt;br /&gt;
  --------------------------------------------------------------------- &lt;br /&gt;
*}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 alfmarcua cammonagu gleherlop benber&lt;br /&gt;
   giafus1 pabbergue *) &lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  by (induct xs) auto&lt;br /&gt;
&lt;br /&gt;
(* pabalagon josgomrom4 cammonagu*)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;estaEn x [] = algunos (λa. x=a) []&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix y xs&lt;br /&gt;
  assume HI: &amp;quot;estaEn x xs = algunos (λa. x=a) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (y#xs) = (x=y ∨ estaEn x xs)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = (x=y ∨ algunos (λa. x=a) xs)&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;estaEn x (y#xs) = algunos (λa. x=a) (y#xs)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = algunos (λk. x=k) xs&amp;quot; (is &amp;quot;?P xs&amp;quot;)&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  show &amp;quot;?P []&amp;quot; by (simp only: estaEn.simps(1) algunos.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI:&amp;quot;?P xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (a # xs) = (x=a ∨ estaEn x xs)&amp;quot; &lt;br /&gt;
    by (simp only: estaEn.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (x=a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only: HI)&lt;br /&gt;
  (* also have &amp;quot;... = ((λk. x=k) a ∨ algunos (λk. x=k) xs)&amp;quot; by (simp only:HOL.simp_thms(6)) *)&lt;br /&gt;
  also have &amp;quot;... = algunos (λk. x=k) (a#xs)&amp;quot; by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show &amp;quot;?P (a#xs)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;estaEn x xs = (algunos (λy. y = x) xs)&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  case Nil&lt;br /&gt;
  have &amp;quot;estaEn x [] = False&amp;quot; by (simp only: estaEn.simps(1))&lt;br /&gt;
  also have &amp;quot;False = (algunos (λy. y = x) [])&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(1))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
next&lt;br /&gt;
  case (Cons z xs)&lt;br /&gt;
  assume IH: &amp;quot;estaEn x xs = algunos (λy. y = x) xs&amp;quot;&lt;br /&gt;
  have &amp;quot;estaEn x (z#xs) = ( z = x ∨ estaEn x xs )&amp;quot; by force&lt;br /&gt;
  also have &amp;quot;... = ( z = x ∨ algunos (λy. y = x) xs)&amp;quot; by (simp only: IH)&lt;br /&gt;
  also have &amp;quot;... = (algunos (λy. y = x) (z#xs))&amp;quot; &lt;br /&gt;
    by (simp only: algunos.simps(2))&lt;br /&gt;
  finally show ?case .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_3&amp;diff=241</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_3&amp;diff=241"/>
		<updated>2019-01-13T10:38:27Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R3: Razonamiento sobre programas *}&lt;br /&gt;
&lt;br /&gt;
theory R3_Razonamiento_sobre_programas_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sumaImpares (Suc n) = sumaImpares n + (2*n+1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.2. Escribir la demostración detallada de &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + (2*n+1)&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + (2*n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = n*n + (n+n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*n + n + n + 1&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*n + n*1 + n + 1&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*(n+1) + n + 1&amp;quot; &lt;br /&gt;
    by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  also have &amp;quot;... = n*(n+1) + (n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n+1)&amp;quot; &lt;br /&gt;
    by (simp only: Groups.ab_semigroup_mult_class.mult.commute)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n+1)*1&amp;quot; by (simp only: Nat.nat_mult_1_right)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  also have &amp;quot;... = (Suc n) * (Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n) * (Suc n)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 hugrubsan enrparalv juacanrod *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + 2 * n + 1&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + 2*n + 1&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = n*n + n + n + 1&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n + 1)&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n + 1)*1&amp;quot; by (simp only: Nat.nat_mult_1_right)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n)*(Suc n)&amp;quot; &lt;br /&gt;
    by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 raffergon2 aribatval alfmarcua cammonagu gleherlop alikan&lt;br /&gt;
   pabbergue giafus1 *) &lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + 2*n +1&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + 2*n + 1&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (Suc n)*(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n)*(Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot;&lt;br /&gt;
| &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
      sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Escribir la demostración detallada de &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
        sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = 2 * 2^(n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = 2 * 2^(Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc (Suc n))&amp;quot; &lt;br /&gt;
    by (simp only: Power.power_class.power.power_Suc)&lt;br /&gt;
  also have &amp;quot;... = 2^((Suc n)+1)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 alfmarcua hugrubsan enrparalv gleherlop juacanrod alikan*)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
        sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1)+2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... =2*2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; &lt;br /&gt;
    by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 aribatval cammonagu hugrubsan&lt;br /&gt;
   pabbergue giafus1 *) &lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^1&amp;quot; by (simp only: Power.power_one_right)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; &lt;br /&gt;
    by (simp only: Nat.add_0)&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
        sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = 2*2^(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = 2*2^(Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n)*2^1&amp;quot; by (simp only: Power.power_one_right)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n + 1)&amp;quot; &lt;br /&gt;
    by (simp only: Power.power_add)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x       = []&amp;quot;&lt;br /&gt;
| &amp;quot;copia (Suc n) x = x # copia n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar detalladamente que todos los elementos de&lt;br /&gt;
  (copia n x) son iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim benber raffergon2 aribatval josgomrom4 hugrubsan cammonagu&lt;br /&gt;
   gleherlop marfruman1 pabbergue giafus1 juacanrod *) &lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  fix x :: &amp;#039;a&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia 0 x) = todos (λy. y=x) []&amp;quot; &lt;br /&gt;
    by (simp only: copia.simps(1))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x :: &amp;#039;a&lt;br /&gt;
  fix n :: nat&lt;br /&gt;
  assume HI: &amp;quot;todos (λy. y = x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;(todos (λy. y = x) (copia (Suc n) x) ) = &lt;br /&gt;
        (todos (λy. y = x) (x # copia n x))&amp;quot;&lt;br /&gt;
    by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (((λy. y = x) x ) ∧ todos (λy. y = x) (copia n x) )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: HI)&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induction n)&lt;br /&gt;
  fix x:: &amp;#039;a&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia 0 x) = todos (λy. y=x) []&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x:: &amp;#039;a&lt;br /&gt;
  fix n:: nat&lt;br /&gt;
  assume HI: &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia (Suc n) x) = &lt;br /&gt;
        todos (λy. y=x) (x#(copia n x))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;todos (λy. y = x) (copia 0 x) = todos (λy. y = x) []&amp;quot; &lt;br /&gt;
    by (simp only: copia.simps(1))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI:&amp;quot;todos (λy. y = x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;(todos (λy. y = x) (copia (Suc n) x) ) = &lt;br /&gt;
        (todos (λy. y = x) (x # copia n x))&amp;quot;&lt;br /&gt;
    by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( ( (λy. y = x) x ) ∧ todos (λy. y = x) (copia n x) )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: HI)&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Definir la función&lt;br /&gt;
    factR :: nat ⇒ nat&lt;br /&gt;
  tal que (factR n) es el factorial de n. Por ejemplo,&lt;br /&gt;
    factR 4 = 24&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun factR :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factR 0       = 1&amp;quot;&lt;br /&gt;
| &amp;quot;factR (Suc n) = Suc n * factR n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI&amp;#039; 0       x = x&lt;br /&gt;
     factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&lt;br /&gt;
  Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  Indicación: La propiedad mult_Suc es &lt;br /&gt;
     (Suc m) * n = n + m * n&lt;br /&gt;
  Puede que se necesite desactivarla en un paso con &lt;br /&gt;
     (simp del: mult_Suc)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun factI&amp;#039; :: &amp;quot;nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI&amp;#039; 0       x = x&amp;quot;&lt;br /&gt;
| &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (x * Suc n)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI n = factI&amp;#039; n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  (* Reformulación para aplicar la hipótesis inductiva con un valor &lt;br /&gt;
     distinto de x. *)&lt;br /&gt;
  have &amp;quot;∀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  proof (induct n)&lt;br /&gt;
    show &amp;quot;∀x. factI&amp;#039; 0 x = x * factR 0&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix x&lt;br /&gt;
      have &amp;quot;factI&amp;#039; 0 x = x&amp;quot; by (simp only: factI&amp;#039;.simps(1))&lt;br /&gt;
      also have &amp;quot;... = x * 1&amp;quot; by (simp only:)&lt;br /&gt;
      also have &amp;quot;... = x * factR 0&amp;quot; by (simp only: factR.simps(1))&lt;br /&gt;
      finally show &amp;quot;factI&amp;#039; 0 x = x * factR 0&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;⋀n. ∀x. factI&amp;#039; n x = x * factR n ⟹ &lt;br /&gt;
              ∀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix x&lt;br /&gt;
      fix n&lt;br /&gt;
      assume HI: &amp;quot;∀y. factI&amp;#039; n y = y * factR n&amp;quot;&lt;br /&gt;
      have &amp;quot;factI&amp;#039; (Suc n) x =  factI&amp;#039; n (x * Suc n)&amp;quot; &lt;br /&gt;
        by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
      also have &amp;quot;... = (x * Suc n) * factR n&amp;quot; by (simp only: HI)&lt;br /&gt;
      also have &amp;quot;... = x * factR (Suc n)&amp;quot; by (simp only: factR.simps(2))&lt;br /&gt;
      finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
  thus &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 aribatval josgomrom4 alfmarcua&lt;br /&gt;
   hugrubsan cammonagu marfruman1 gleherlop pabbergue giafus1 juacanrod *) &lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induction n arbitrary: x)&lt;br /&gt;
  fix x&lt;br /&gt;
  have &amp;quot;factI&amp;#039; 0 x = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * 1&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (x * Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * Suc n * factR n&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;factI&amp;#039; (Suc n) x = x*factR (Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: factR.simps(2))&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.3. Escribir la demostración detallada de&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  fix n&lt;br /&gt;
  have &amp;quot;factI n = factI&amp;#039; n 1&amp;quot; by (simp only: factI.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 1 * factR n&amp;quot; by (simp only: fact)&lt;br /&gt;
  also have &amp;quot;... = factR n&amp;quot; by (simp only: Groups.mult_1)&lt;br /&gt;
  finally show &amp;quot;factI n = factR n&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 alfmarcua hugrubsan&lt;br /&gt;
   marfruman1 gleherlop pabbergue giafus1 juacanrod *) &lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;factI n = factI&amp;#039; n 1&amp;quot; by (simp only: factI.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 1*factR n&amp;quot; using fact by simp&lt;br /&gt;
  finally show &amp;quot;factI n = factR n&amp;quot; by (simp only: mult_1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.1. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia []     y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.2. Escribir la demostración detallada de&lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber aribatval alfmarcua giafus1 *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  also have &amp;quot;... = [] @ [y]&amp;quot; by (simp only: List.append.left_neutral)&lt;br /&gt;
  finally show &amp;quot;amplia [] y = [] @ [y]&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x&lt;br /&gt;
  fix xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = x # (xs @ [y])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (x#xs) @ [y]&amp;quot; by (simp only: List.append.append_Cons)&lt;br /&gt;
  finally show &amp;quot;amplia (x#xs) y = (x#xs) @ [y]&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 raffergon2 enrparalv alikan gleherlop juacanrod *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  also have &amp;quot;... = [] @ [y]&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;amplia [] y = [] @ [y]&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (x#xs) y = x# amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = x# (xs @ [y])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (x#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;amplia (x#xs) y =(x#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 hugrubsan cammonagu pabbergue *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  show &amp;quot;amplia [] y = [] @ [y]&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (a#xs) y = a # amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = a # (xs @ [y])&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;amplia (a#xs) y = (a#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_2&amp;diff=240</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_2&amp;diff=240"/>
		<updated>2019-01-13T10:21:37Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R2: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R2_Razonamiento_automatico_sobre_programas_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
declare [[names_short]]&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
   hugrubsan enrparalv gleherlop chrgencar giafus1 pabbergue alikan*) &lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaImpares n = 2*n-1 + sumaImpares (n-1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares 1  = 1&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares 3  = 9&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares 5  = 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 marfruman1 benber *)&lt;br /&gt;
fun sumaImpares2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares2 0 = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaImpares2 (Suc n) = 2*n + 1 + sumaImpares2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares2 1  = 1&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares2 3  = 9&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares2 5  = 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod josgomrom4 hugrubsan&lt;br /&gt;
   enrparalv gleherlop benber chrgencar giafus1 alikan*) &lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply simp&lt;br /&gt;
   apply simp&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua raffergon2 marfruman1 pabbergue *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  by (induction n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu chrgencar hugrubsan gleherlop benber&lt;br /&gt;
   pabbergue *) &lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
     2^(n+1) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno 3  =  16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod josgomrom4 marfruman1*)&lt;br /&gt;
fun sumaPotenciasDeDosMasUno2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno2 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno2 (Suc n) = &lt;br /&gt;
     2^(Suc n) + sumaPotenciasDeDosMasUno2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno2 3  =  16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua raffergon2 enrparalv alikan giafus1 *)&lt;br /&gt;
fun sumaPotenciasDeDosMasUno3 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno3 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno3 n = 2^n + sumaPotenciasDeDosMasUno3 (n-1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaPotenciasDeDosMasUno3 3  =  16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
   josgomrom4 hugrubsan enrparalv benber chrgencar gleherlop  giafus1&lt;br /&gt;
   pabbergue alikan*)  &lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 hugrubsan benber gleherlop&lt;br /&gt;
   pabbergue alikan*) &lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia (Suc n) x = x#copia n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia 3 x = [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod marfruman1 *)&lt;br /&gt;
fun copia2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia2 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia2 (Suc n) x = [x] @ copia2 n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia2 3 x = [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim alfmarcua raffergon2 enrparalv giafus1 *)&lt;br /&gt;
fun copia3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia3 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia3 n x = x#(copia (n-1) x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;copia3 3 x = [x,x,x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  Nota: La conjunción se representa por ∧&lt;br /&gt;
  ----------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
   josgomrom4 marfruman1 hugrubsan enrparalv benber chrgencar giafus1&lt;br /&gt;
   gleherlop pabbergue alikan*)  &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&amp;quot;&lt;br /&gt;
value &amp;quot;todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.3. Demostrar que todos los elementos de (copia n x) son&lt;br /&gt;
  iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
   josgomrom4 hugrubsan enrparalv benber giafus1 pabbergue alikan*) &lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* Comentario: La demostración anterior falla para copia3. *)&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
   josgomrom4 marfruman1 hugrubsan enrparalv benber chrgencar gleherlop&lt;br /&gt;
   giafus1 pabbergue alikan*)  &lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia [] y = [y]&amp;quot; |&lt;br /&gt;
  &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;amplia [d,a] t = [d,a,t]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu juacanrod alfmarcua raffergon2&lt;br /&gt;
  josgomrom4 hugrubsan gleherlop enrparalv benber chrgencar giafus1&lt;br /&gt;
  pabbergue alikan*)  &lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  apply (induction xs)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  by (induction xs) simp_all&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  by (induction xs) auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=239</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=239"/>
		<updated>2019-01-13T09:57:34Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav manperjim chrgencar antramhur&lt;br /&gt;
   pabbergue alikan*)  &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar&lt;br /&gt;
   antramhur alikan pabbergue *)  &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1&lt;br /&gt;
   gleherlop alfmarcua enrparalv chrgencar antramhur alikan pabbergue *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 []     = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 []   = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar pabbergue alikan*)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop&lt;br /&gt;
   chrgencar benber antramhur*) &lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1 pabbergue *)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 antramhur *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar&lt;br /&gt;
   gleherlop giafus1 pabbergue *) &lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
| &amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun coge6 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge6 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge6 n (x#xs) = (case n of 0 ⇒ [] | Suc n ⇒ x # coge6 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge6 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon antramhur *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 pabbergue*) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun elimina4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina4 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;elimina4 n (x#xs) = (case n of 0 ⇒ x#xs | Suc n ⇒ elimina4 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina4 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan&lt;br /&gt;
   alfmarcua enrparalv aribatval chrgencar giafus1 alikan pabbergue antramhur *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   enrparalv aribatval gleherlop chrgencar giafus1 alikan pabbergue antramhur *) &lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   enrparalv aribatval gleherlop chrgencar giafus1 pabbergue antramhur alikan*) &lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber&lt;br /&gt;
   alfmarcua aribatval gleherlop chrgencar giafus1 pabbergue antramhur *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_3&amp;diff=179</id>
		<title>Relación 3</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_3&amp;diff=179"/>
		<updated>2018-12-11T11:28:34Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R3: Razonamiento sobre programas *}&lt;br /&gt;
&lt;br /&gt;
theory R3_Razonamiento_sobre_programas&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot;&lt;br /&gt;
| &amp;quot;sumaImpares (Suc n) = sumaImpares n + (2*n+1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.2. Escribir la demostración detallada de &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* &amp;quot;La demostración detallada es&amp;quot; *)&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + (2*n+1)&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + (2*n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = n*n + (n+n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*n + n + n + 1&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*n + n*1 + n + 1&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = n*(n+1) + n + 1&amp;quot; &lt;br /&gt;
    by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  also have &amp;quot;... = n*(n+1) + (n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n+1)&amp;quot; &lt;br /&gt;
    by (simp only: Groups.ab_semigroup_mult_class.mult.commute)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n+1)*1&amp;quot; by (simp only: Nat.nat_mult_1_right)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  also have &amp;quot;... = (Suc n) * (Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n) * (Suc n)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 hugrubsan enrparalv *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + 2 * n + 1&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + 2*n + 1&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = n*n + n + n + 1&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n + 1)&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*n + (n + 1)*1&amp;quot; by (simp only: Nat.nat_mult_1_right)&lt;br /&gt;
  also have &amp;quot;... = (n+1)*(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib2)&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n)*(Suc n)&amp;quot; &lt;br /&gt;
    by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 raffergon2 aribatval alfmarcua cammonagu gleherlop alikan *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  show &amp;quot;sumaImpares 0 = 0*0&amp;quot; by (simp only: sumaImpares.simps(1))&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaImpares (Suc n) = sumaImpares n + 2*n +1&amp;quot; &lt;br /&gt;
    by (simp only: sumaImpares.simps(2))&lt;br /&gt;
  also have &amp;quot;... = n*n + 2*n + 1&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (Suc n)*(Suc n)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaImpares (Suc n) = (Suc n)*(Suc n)&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot;&lt;br /&gt;
| &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
      sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Escribir la demostración detallada de &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber josgomrom4 *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
        sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = 2 * 2^(n+1)&amp;quot; by (simp only:)&lt;br /&gt;
  also have &amp;quot;... = 2 * 2^(Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc (Suc n))&amp;quot; &lt;br /&gt;
    by (simp only: Power.power_class.power.power_Suc)&lt;br /&gt;
  also have &amp;quot;... = 2^((Suc n)+1)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 alfmarcua hugrubsan enrparalv *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
        sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1)+2^(n+1)&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... =2*2^(n+1)&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = 2^((Suc n)+1)&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^((Suc n)+1)&amp;quot; &lt;br /&gt;
        by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 aribatval cammonagu hugrubsan *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; &lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 2^1&amp;quot; by (simp only: Power.power_one_right)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno 0 = 2^(0+1)&amp;quot; &lt;br /&gt;
    by (simp only: Nat.add_0)&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  have &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = sumaPotenciasDeDosMasUno n + 2^(n+1)&amp;quot;&lt;br /&gt;
    by (simp only: sumaPotenciasDeDosMasUno.simps(2))&lt;br /&gt;
  also have &amp;quot;... = 2^(n+1) + 2^(n+1)&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = 2*2^(n+1)&amp;quot; by (simp only: Nat.add_mult_distrib)&lt;br /&gt;
  also have &amp;quot;... = 2*2^(Suc n)&amp;quot; by (simp only: Nat.Suc_eq_plus1)&lt;br /&gt;
  also have &amp;quot;... = 2^(Suc n)*2^1&amp;quot; by (simp only: Power.power_one_right)&lt;br /&gt;
  finally show &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = 2^(Suc n + 1)&amp;quot; &lt;br /&gt;
    by (simp only: Power.power_add)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x       = []&amp;quot;&lt;br /&gt;
| &amp;quot;copia (Suc n) x = x # copia n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p []     = True&amp;quot;&lt;br /&gt;
| &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Demostrar detalladamente que todos los elementos de&lt;br /&gt;
  (copia n x) son iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim benber raffergon2 aribatval josgomrom4 hugrubsan cammonagu*)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  fix x :: &amp;#039;a&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia 0 x) = todos (λy. y=x) []&amp;quot; &lt;br /&gt;
    by (simp only: copia.simps(1))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x :: &amp;#039;a&lt;br /&gt;
  fix n :: nat&lt;br /&gt;
  assume HI: &amp;quot;todos (λy. y = x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;(todos (λy. y = x) (copia (Suc n) x) ) = &lt;br /&gt;
        (todos (λy. y = x) (x # copia n x))&amp;quot;&lt;br /&gt;
    by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = (((λy. y = x) x ) ∧ todos (λy. y = x) (copia n x) )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: HI)&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induction n)&lt;br /&gt;
  fix x:: &amp;#039;a&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia 0 x) = todos (λy. y=x) []&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x:: &amp;#039;a&lt;br /&gt;
  fix n:: nat&lt;br /&gt;
  assume HI: &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;todos (λy. y=x) (copia (Suc n) x) = &lt;br /&gt;
        todos (λy. y=x) (x#(copia n x))&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = ((λy. y=x) x ∧ todos (λy. y=x) (copia n x))&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;todos (λy. y=x) (copia (Suc n) x)&amp;quot; using HI by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
proof (induct n)&lt;br /&gt;
  have &amp;quot;todos (λy. y = x) (copia 0 x) = todos (λy. y = x) []&amp;quot; &lt;br /&gt;
    by (simp only: copia.simps(1))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: todos.simps(1))&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia 0 x)&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI:&amp;quot;todos (λy. y = x) (copia n x)&amp;quot;&lt;br /&gt;
  have &amp;quot;(todos (λy. y = x) (copia (Suc n) x) ) = &lt;br /&gt;
        (todos (λy. y = x) (x # copia n x))&amp;quot;&lt;br /&gt;
    by (simp only: copia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = ( ( (λy. y = x) x ) ∧ todos (λy. y = x) (copia n x) )&amp;quot;&lt;br /&gt;
    by (simp only: todos.simps(2))&lt;br /&gt;
  also have &amp;quot;...&amp;quot; by (simp only: HI)&lt;br /&gt;
  finally show &amp;quot;todos (λy. y = x) (copia (Suc n) x)&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Definir la función&lt;br /&gt;
    factR :: nat ⇒ nat&lt;br /&gt;
  tal que (factR n) es el factorial de n. Por ejemplo,&lt;br /&gt;
    factR 4 = 24&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun factR :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factR 0       = 1&amp;quot;&lt;br /&gt;
| &amp;quot;factR (Suc n) = Suc n * factR n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Se considera la siguiente definición iterativa de la&lt;br /&gt;
  función factorial &lt;br /&gt;
     factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI n = factI&amp;#039; n 1&lt;br /&gt;
     &lt;br /&gt;
     factI&amp;#039; :: nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
     factI&amp;#039; 0       x = x&lt;br /&gt;
     factI&amp;#039; (Suc n) x = factI&amp;#039; n (Suc n)*x&lt;br /&gt;
  Demostrar que, para todo n y todo x, se tiene &lt;br /&gt;
     factI&amp;#039; n x = x * factR n&lt;br /&gt;
  Indicación: La propiedad mult_Suc es &lt;br /&gt;
     (Suc m) * n = n + m * n&lt;br /&gt;
  Puede que se necesite desactivarla en un paso con &lt;br /&gt;
     (simp del: mult_Suc)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
fun factI&amp;#039; :: &amp;quot;nat ⇒ nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI&amp;#039; 0       x = x&amp;quot;&lt;br /&gt;
| &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (x * Suc n)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun factI :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;factI n = factI&amp;#039; n 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
lemma fact: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  (* Reformulación para aplicar la hipótesis inductiva con un valor &lt;br /&gt;
     distinto de x. *)&lt;br /&gt;
  have &amp;quot;∀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  proof (induct n)&lt;br /&gt;
    show &amp;quot;∀x. factI&amp;#039; 0 x = x * factR 0&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix x&lt;br /&gt;
      have &amp;quot;factI&amp;#039; 0 x = x&amp;quot; by (simp only: factI&amp;#039;.simps(1))&lt;br /&gt;
      also have &amp;quot;... = x * 1&amp;quot; by (simp only:)&lt;br /&gt;
      also have &amp;quot;... = x * factR 0&amp;quot; by (simp only: factR.simps(1))&lt;br /&gt;
      finally show &amp;quot;factI&amp;#039; 0 x = x * factR 0&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  next&lt;br /&gt;
    show &amp;quot;⋀n. ∀x. factI&amp;#039; n x = x * factR n ⟹ ∀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot;&lt;br /&gt;
    proof&lt;br /&gt;
      fix x&lt;br /&gt;
      fix n&lt;br /&gt;
      assume HI: &amp;quot;∀y. factI&amp;#039; n y = y * factR n&amp;quot;&lt;br /&gt;
      have &amp;quot;factI&amp;#039; (Suc n) x =  factI&amp;#039; n (x * Suc n)&amp;quot; by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
      also have &amp;quot;... = (x * Suc n) * factR n&amp;quot; by (simp only: HI)&lt;br /&gt;
      also have &amp;quot;... = x * factR (Suc n)&amp;quot; by (simp only: factR.simps(2))&lt;br /&gt;
      finally show &amp;quot;factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot; .&lt;br /&gt;
    qed&lt;br /&gt;
  qed&lt;br /&gt;
  thus &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 aribatval josgomrom4 alfmarcua hugrubsan cammonagu*)&lt;br /&gt;
lemma fact2: &amp;quot;factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
proof (induction n arbitrary: x)&lt;br /&gt;
  fix x&lt;br /&gt;
  have &amp;quot;factI&amp;#039; 0 x = x&amp;quot; by simp&lt;br /&gt;
  also have &amp;quot;... = x * 1&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;factI&amp;#039; 0 x = x * factR 0&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix n&lt;br /&gt;
  assume HI: &amp;quot;⋀x. factI&amp;#039; n x = x * factR n&amp;quot;&lt;br /&gt;
  show &amp;quot;⋀x. factI&amp;#039; (Suc n) x = x * factR (Suc n)&amp;quot;&lt;br /&gt;
  proof -&lt;br /&gt;
    fix x&lt;br /&gt;
    have &amp;quot;factI&amp;#039; (Suc n) x = factI&amp;#039; n (x * Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: factI&amp;#039;.simps(2))&lt;br /&gt;
    also have &amp;quot;... = x * Suc n * factR n&amp;quot; using HI by simp&lt;br /&gt;
    finally show &amp;quot;factI&amp;#039; (Suc n) x = x*factR (Suc n)&amp;quot; &lt;br /&gt;
      by (simp only: factR.simps(2))&lt;br /&gt;
  qed&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.3. Escribir la demostración detallada de&lt;br /&gt;
     factI n = factR n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  fix n&lt;br /&gt;
  have &amp;quot;factI n = factI&amp;#039; n 1&amp;quot; by (simp only: factI.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 1 * factR n&amp;quot; by (simp only: fact)&lt;br /&gt;
  also have &amp;quot;... = factR n&amp;quot; by (simp only: Groups.mult_1)&lt;br /&gt;
  finally show &amp;quot;factI n = factR n&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 alfmarcua hugrubsan *)&lt;br /&gt;
corollary &amp;quot;factI n = factR n&amp;quot;&lt;br /&gt;
proof -&lt;br /&gt;
  have &amp;quot;factI n = factI&amp;#039; n 1&amp;quot; by (simp only: factI.simps(1))&lt;br /&gt;
  also have &amp;quot;... = 1*factR n&amp;quot; using fact by simp&lt;br /&gt;
  finally show &amp;quot;factI n = factR n&amp;quot; by (simp only: mult_1)&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.1. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia []     y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5.2. Escribir la demostración detallada de&lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* benber aribatval alfmarcua *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  also have &amp;quot;... = [] @ [y]&amp;quot; by (simp only: List.append.left_neutral)&lt;br /&gt;
  finally show &amp;quot;amplia [] y = [] @ [y]&amp;quot; .&lt;br /&gt;
next&lt;br /&gt;
  fix x&lt;br /&gt;
  fix xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = x # (xs @ [y])&amp;quot; by (simp only: HI)&lt;br /&gt;
  also have &amp;quot;... = (x#xs) @ [y]&amp;quot; by (simp only: List.append.append_Cons)&lt;br /&gt;
  finally show &amp;quot;amplia (x#xs) y = (x#xs) @ [y]&amp;quot; .&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(*marfruman1 raffergon2 enrparalv alikan *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induct xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  also have &amp;quot;... = [] @ [y]&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;amplia [] y = [] @ [y]&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix x xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (x#xs) y = x# amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = x# (xs @ [y])&amp;quot; using HI by simp&lt;br /&gt;
  also have &amp;quot;... = (x#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
  finally show &amp;quot;amplia (x#xs) y =(x#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon josgomrom4 hugrubsan cammonagu*)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
proof (induction xs)&lt;br /&gt;
  have &amp;quot;amplia [] y = [y]&amp;quot; by (simp only: amplia.simps(1))&lt;br /&gt;
  show &amp;quot;amplia [] y = [] @ [y]&amp;quot; by simp&lt;br /&gt;
next&lt;br /&gt;
  fix a xs&lt;br /&gt;
  assume HI: &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  have &amp;quot;amplia (a#xs) y = a # amplia xs y&amp;quot; by (simp only: amplia.simps(2))&lt;br /&gt;
  also have &amp;quot;... = a # (xs @ [y])&amp;quot; using HI by simp&lt;br /&gt;
  finally show &amp;quot;amplia (a#xs) y = (a#xs) @ [y]&amp;quot; by simp&lt;br /&gt;
qed&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=132</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=132"/>
		<updated>2018-11-25T19:28:40Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun coge6 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge6 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge6 n (x#xs) = (case n of 0 ⇒ [] | Suc n ⇒ x # coge6 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge6 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun elimina4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina4 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;elimina4 n (x#xs) = (case n of 0 ⇒ x#xs | Suc n ⇒ elimina4 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina4 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 alikan *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 alikan *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=131</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=131"/>
		<updated>2018-11-25T18:30:41Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun coge6 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge6 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge6 n (x#xs) = (case n of 0 ⇒ [] | Suc n ⇒ x # coge6 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge6 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun elimina4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina4 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;elimina4 n (x#xs) = (case n of 0 ⇒ x#xs | Suc n ⇒ elimina4 n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina4 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=130</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=130"/>
		<updated>2018-11-25T18:09:34Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge6 n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge6 n (x#xs) = (case n of 0 ⇒ [] | Suc n ⇒ x # coge n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge6 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=129</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=129"/>
		<updated>2018-11-25T18:07:35Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alikan *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge n [] = []&amp;quot;|&lt;br /&gt;
  &amp;quot;coge n (x#xs) = (case n of 0 ⇒ [] | Suc n ⇒ x # coge n xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=128</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=128"/>
		<updated>2018-11-25T16:04:57Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 alikan*)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=127</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=127"/>
		<updated>2018-11-25T15:33:29Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur alikan *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 *)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=126</id>
		<title>Relación 1</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_1&amp;diff=126"/>
		<updated>2018-11-25T15:09:48Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R1: Programación funcional en Isabelle *}&lt;br /&gt;
&lt;br /&gt;
theory R1_Programacion_funcional_en_Isabelle_alu&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
text {* ----------------------------------------------------------------&lt;br /&gt;
  Ejercicio 1. Definir, por recursión, la función&lt;br /&gt;
     longitud :: &amp;#039;a list ⇒ nat&lt;br /&gt;
  tal que (longitud xs) es la longitud de la listas xs. Por ejemplo,&lt;br /&gt;
     longitud [a,b,c] = 3&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu pabalagon raffergon2 aribatval juacanrod josgomrom4&lt;br /&gt;
   marfruman1 gleherlop benber alfmarcua enrparlav chrgencar antramhur *) &lt;br /&gt;
fun longitud :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud (x#xs) = 1 + longitud xs &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan giafus1 *)&lt;br /&gt;
fun longitud2 :: &amp;quot;&amp;#039;a list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;longitud2 [] = 0 &amp;quot;&lt;br /&gt;
| &amp;quot;longitud2 xs = 1 + longitud2 (tl xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;longitud2 [a,b,c] = 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2. Definir la función&lt;br /&gt;
     fun intercambia :: &amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&lt;br /&gt;
  tal que (intercambia p) es el par obtenido intercambiando las&lt;br /&gt;
  componentes del par p. Por ejemplo,&lt;br /&gt;
     intercambia (u,v) = (v,u)&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu raffergon2 aribatval juacanrod marfruman1&lt;br /&gt;
   gleherlop benber hugrubsan alfmarcua enrparalv giafus1 chrgencar antramhur alikan*) &lt;br /&gt;
fun intercambia :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia (x,y) = (y, x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 *)&lt;br /&gt;
fun intercambia2 :: &amp;quot;&amp;#039;a × &amp;#039;b ⇒ &amp;#039;b × &amp;#039;a&amp;quot; where&lt;br /&gt;
  &amp;quot;intercambia2 xs = (snd xs, fst xs) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;intercambia2 (u,v) = (v,u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* ---------------------------------------------------------------&lt;br /&gt;
  Ejercicio 3. Definir, por recursión, la función&lt;br /&gt;
     inversa :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversa xs) es la lista obtenida invirtiendo el orden de los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     inversa [a,d,c] = [c,d,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;aux [] a     = a&amp;quot; &lt;br /&gt;
| &amp;quot;aux (x#xs) a = aux xs (x#a)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa xs = aux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 gleherlop&lt;br /&gt;
   alfmarcua enrparalv chrgencar antramhur *) &lt;br /&gt;
fun inversa2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa2 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa2 (x#xs) = inversa2 xs @ [x]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa2 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan giafus1 *)&lt;br /&gt;
fun inversa3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa3 [] = []&amp;quot;  &lt;br /&gt;
| &amp;quot;inversa3 (xs) = inversa3(tl xs) @ [ hd (xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa3 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval *)&lt;br /&gt;
fun inversa4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa4 [] = []&amp;quot; &lt;br /&gt;
| &amp;quot;inversa4 xs = last xs # (inversa4 (butlast xs))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa4 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* benber *)&lt;br /&gt;
fun inversa5aux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5aux [] y = [y]&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5aux (x#xs) y = x#(inversa5aux xs y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversa5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversa5 [] = []&amp;quot;&lt;br /&gt;
| &amp;quot;inversa5 (x#xs) = inversa5aux (inversa5 xs) x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversa5 [a,d,c] = [c,d,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4. Definir la función&lt;br /&gt;
     repite :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (repite n x) es la lista formada por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     repite 3 a = [a,a,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalag aribatval antramhur*)&lt;br /&gt;
fun repite :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite 0 x = []&amp;quot;&lt;br /&gt;
| &amp;quot;repite (Suc n) x = x # repite n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua gleherlop giafus1 chrgencar *)&lt;br /&gt;
fun repite2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite2 0 x = [] &amp;quot;&lt;br /&gt;
| &amp;quot;repite2 n x = x # repite2 (n-1) x &amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite2 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan*)&lt;br /&gt;
fun repite3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite3 0 a = []&amp;quot; &lt;br /&gt;
| &amp;quot;repite3 n a = [a] @ repite3 (n-1) a&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
value &amp;quot;repite3 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv*)&lt;br /&gt;
fun repite4 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;repite4 n x = (if n = 0 then [] else repite4 (n-1) x @ [x])&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;repite4 3 a = [a,a,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 5. Definir la función&lt;br /&gt;
     conc :: &amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (conc xs ys) es la concatención de las listas xs e ys. Por&lt;br /&gt;
  ejemplo, &lt;br /&gt;
     conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 aribatval gleherlop chrgencar benber *)&lt;br /&gt;
fun conc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc (x#xs) ys = x # conc xs ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* cammonagu marfruman1*)&lt;br /&gt;
fun conc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc2 ys []     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc2 xs (y#ys) = xs @y # ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc2 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun conc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc3 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;conc3 xs ys = [hd (xs)] @ conc3 (tl (xs)) ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;conc3 [a,d] [b,d,a,c] = [a,d,b,d,a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan enrparalv giafus1 *)&lt;br /&gt;
fun conc4 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc4 xs ys = xs @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua *)&lt;br /&gt;
fun conc5 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;conc5 [] ys = ys&amp;quot;&lt;br /&gt;
| &amp;quot;conc5 xs ys = conc5 (butlast xs) ((last xs)#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 6. Definir la función&lt;br /&gt;
     coge :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (coge n xs) es la lista de los n primeros elementos de xs. Por &lt;br /&gt;
  ejemplo, &lt;br /&gt;
     coge 2 [a,c,d,b,e] = [a,c]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon raffergon2 *)&lt;br /&gt;
fun coge :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge (Suc n) (x#xs) = x # coge n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim cammonagu josgomrom4 marfruman1 benber alfmarcua chrgencar gleherlop giafus1 *)&lt;br /&gt;
fun coge2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge2 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge2 n (x#xs) = x # coge2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge2 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun coge3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge3 0 xs = []&amp;quot; |&lt;br /&gt;
  &amp;quot;coge3 n xs = [hd (xs)] @ coge3 (n-1) (tl (xs))&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge3 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* aribatval hugrubsan *)&lt;br /&gt;
fun coge4 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
 &amp;quot;coge4 0 xs = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n [] = []&amp;quot; |&lt;br /&gt;
 &amp;quot;coge4 n xs = (hd xs) # coge4 (n-1) (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge4 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* enrparalv *)&lt;br /&gt;
fun coge5 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;coge5 n []      = []&amp;quot;&lt;br /&gt;
  |&amp;quot;coge5 n (x#xs) = (if (n=0) then [] else [x] @ coge5 (n-1) xs )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;coge5 2 [a,c,d,b,e] = [a,c]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 7. Definir la función&lt;br /&gt;
     elimina :: nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (elimina n xs) es la lista obtenida eliminando los n primeros&lt;br /&gt;
  elementos de xs. Por ejemplo, &lt;br /&gt;
     elimina 2 [a,c,d,b,e] = [d,b,e]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
fun elimina :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina 0 xs           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina n []           = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina (Suc n) (x#xs) = elimina n xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* manperjim raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun elimina2 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina2 0 xs     = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina2 n (x#xs) = elimina2 (n-1) xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina2 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun elimina3 :: &amp;quot;nat ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;elimina3 0 xs = xs&amp;quot; |&lt;br /&gt;
  &amp;quot;elimina3 n xs = elimina3 (n-1) (tl xs)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;elimina3 2 [a,c,d,b,e] = [d,b,e]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 8. Definir la función&lt;br /&gt;
     esVacia :: &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (esVacia xs) se verifica si xs es la lista vacía. Por ejemplo,&lt;br /&gt;
     esVacia [a] = False&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber hugrubsan alfmarcua&lt;br /&gt;
   enrparalv aribatval chrgencar giafus1 *) &lt;br /&gt;
fun esVacia :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;esVacia xs = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia [a] = False&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu juacanrod *)&lt;br /&gt;
fun esVacia2 :: &amp;quot;&amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;esVacia2 xs = (longitud xs = 0)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
value &amp;quot;esVacia2 [a] = False&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 9. Definir la función&lt;br /&gt;
     inversaAc :: &amp;#039;a list ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (inversaAc xs) es a inversa de xs calculada usando&lt;br /&gt;
  acumuladores. Por ejemplo, &lt;br /&gt;
     inversaAc [a,c,b,e] = [e,b,c,a]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon cammonagu josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun inversaAcAux :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux [] ys     = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux (x#xs) ys = inversaAcAux xs (x#ys)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc xs = inversaAcAux xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun inversaAcAux2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux2 [] ys = ys&amp;quot; |&lt;br /&gt;
  &amp;quot;inversaAcAux2 xs ys = inversaAcAux2 (tl xs) ([hd xs]) @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAcAux2 [a,b,c] []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc2 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc2 xs = inversaAcAux2 xs []&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc2 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun inversaAcAux3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAcAux3 [] ys = ys&amp;quot;&lt;br /&gt;
  |&amp;quot;inversaAcAux3 xs ys = inversaAcAux3 (tl xs) [(hd xs)] @ ys&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fun inversaAc3 :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;inversaAc3 xs =  inversaAcAux3 (tl xs) [(hd xs)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;inversaAc3 [a,c,b,e] = [e,b,c,a]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 10. Definir la función&lt;br /&gt;
     sum :: nat list ⇒ nat&lt;br /&gt;
  tal que (sum xs) es la suma de los elementos de xs. Por ejemplo,&lt;br /&gt;
     sum [3,2,5] = 10&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 josgomrom4 marfruman1 benber alfmarcua enrparalv aribatval gleherlop chrgencar giafus1 *)&lt;br /&gt;
fun sum :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum (x#xs) = x + sum xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum [3,2,5] = 10&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* cammonagu *)&lt;br /&gt;
fun sum2:: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum2 []     = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 [x]    = x&amp;quot; |&lt;br /&gt;
  &amp;quot;sum2 (x#xs) = x + sum2 xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum2 [3,2,5] = 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod hugrubsan *)&lt;br /&gt;
fun sum3 :: &amp;quot;nat list ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sum3 [] = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sum3 xs = (hd xs) + sum3 (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sum3 [3,2,5,1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 11. Definir la función&lt;br /&gt;
     map :: (&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&lt;br /&gt;
  tal que (map f xs) es la lista obtenida aplicando la función f a los&lt;br /&gt;
  elementos de xs. Por ejemplo,&lt;br /&gt;
     map (λx. 2*x) [3,2,5] = [6,4,10]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* manperjim pabalagon raffergon2 cammonagu josgomrom4 marfruman1 benber alfmarcua&lt;br /&gt;
   aribatval gleherlop chrgencar giafus1 *) &lt;br /&gt;
fun map :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map f (x#xs) = f x # map f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
(* juacanrod *)&lt;br /&gt;
fun map2 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map2 f []     = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map2 f (x#xs) = [(f x)] @ map2 f xs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map2 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* hugrubsan *)&lt;br /&gt;
fun map3 :: &amp;quot;(&amp;#039;a ⇒ &amp;#039;b) ⇒ &amp;#039;a list ⇒ &amp;#039;b list&amp;quot; where&lt;br /&gt;
  &amp;quot;map3 f [] = []&amp;quot; |&lt;br /&gt;
  &amp;quot;map3 f xs = f (hd xs) # map3 f (tl xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;map3 (λn. Suc n) [2,3,4,5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
	<entry>
		<id>https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_2&amp;diff=120</id>
		<title>Relación 2</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/RA2018/index.php?title=Relaci%C3%B3n_2&amp;diff=120"/>
		<updated>2018-11-22T17:40:56Z</updated>

		<summary type="html">&lt;p&gt;Alikan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;isabelle&amp;quot;&amp;gt;&lt;br /&gt;
chapter {* R2: Razonamiento sobre programas en Isabelle/HOL *}&lt;br /&gt;
&lt;br /&gt;
theory R2_Razonamiento_automatico_sobre_programas&lt;br /&gt;
imports Main &lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
declare [[names_short]]&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.1. Definir la función&lt;br /&gt;
     sumaImpares :: nat ⇒ nat&lt;br /&gt;
  tal que (sumaImpares n) es la suma de los n primeros números&lt;br /&gt;
  impares. Por ejemplo,&lt;br /&gt;
     sumaImpares 5  =  25&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 hugrubsan enrparalv gleherlop chrgencar *)&lt;br /&gt;
fun sumaImpares :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares 0 = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaImpares n = 2*n-1 + sumaImpares (n-1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(* josgomrom4 marfruman1 benber *)&lt;br /&gt;
fun sumaImpares2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaImpares2 0 = 0&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaImpares2 (Suc n) = 2*n + 1 + sumaImpares2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
value &amp;quot;sumaImpares2 1  = 1&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares2 3  = 9&amp;quot;&lt;br /&gt;
value &amp;quot;sumaImpares2 5  = 25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 1.2. Demostrar que &lt;br /&gt;
     sumaImpares n = n*n&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod josgomrom4 hugrubsan enrparalv gleherlop benber chrgencar *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply simp&lt;br /&gt;
   apply simp&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua raffergon2 marfruman1 *)&lt;br /&gt;
lemma &amp;quot;sumaImpares n = n*n&amp;quot;&lt;br /&gt;
  by (induction n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.1. Definir la función&lt;br /&gt;
     sumaPotenciasDeDosMasUno :: nat ⇒ nat&lt;br /&gt;
  tal que &lt;br /&gt;
     (sumaPotenciasDeDosMasUno n) = 1 + 2^0 + 2^1 + 2^2 + ... + 2^n. &lt;br /&gt;
  Por ejemplo, &lt;br /&gt;
     sumaPotenciasDeDosMasUno 3  =  16&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu chrgencar hugrubsan benber *)&lt;br /&gt;
fun sumaPotenciasDeDosMasUno :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno (Suc n) = &lt;br /&gt;
     2^(n+1) + sumaPotenciasDeDosMasUno n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod josgomrom4 marfruman1*)&lt;br /&gt;
fun sumaPotenciasDeDosMasUno2 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno2 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno2 (Suc n) = &lt;br /&gt;
     2^(Suc n) + sumaPotenciasDeDosMasUno2 n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua raffergon2 enrparalv alikan *)&lt;br /&gt;
fun sumaPotenciasDeDosMasUno3 :: &amp;quot;nat ⇒ nat&amp;quot; where&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno3 0 = 2&amp;quot; |&lt;br /&gt;
  &amp;quot;sumaPotenciasDeDosMasUno3 n = 2^n + sumaPotenciasDeDosMasUno3 (n-1)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 2.2. Demostrar que &lt;br /&gt;
     sumaPotenciasDeDosMasUno n = 2^(n+1)&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 josgomrom4&lt;br /&gt;
   hugrubsan enrparalv benber chrgencar *) &lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 *)&lt;br /&gt;
lemma &amp;quot;sumaPotenciasDeDosMasUno n = 2^(n+1)&amp;quot;&lt;br /&gt;
  by (induct n) auto&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.1. Definir la función&lt;br /&gt;
     copia :: nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (copia n x) es la lista formado por n copias del elemento&lt;br /&gt;
  x. Por ejemplo, &lt;br /&gt;
     copia 3 x = [x,x,x]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu josgomrom4 hugrubsan benber *)&lt;br /&gt;
fun copia :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia (Suc n) x = x#copia n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* juacanrod marfruman1 *)&lt;br /&gt;
fun copia2 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia2 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia2 (Suc n) x = [x] @ copia2 n x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(* alfmarcua raffergon2 enrparalv *)&lt;br /&gt;
fun copia3 :: &amp;quot;nat ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;copia3 0 x = []&amp;quot; |&lt;br /&gt;
  &amp;quot;copia3 n x = x#(copia (n-1) x)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.2. Definir la función&lt;br /&gt;
     todos :: (&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&lt;br /&gt;
  tal que (todos p xs) se verifica si todos los elementos de xs cumplen&lt;br /&gt;
  la propiedad p. Por ejemplo,&lt;br /&gt;
     todos (λx. x&amp;gt;(1::nat)) [2,6,4] = True&lt;br /&gt;
     todos (λx. x&amp;gt;(2::nat)) [2,6,4] = False&lt;br /&gt;
  Nota: La conjunción se representa por ∧&lt;br /&gt;
  ----------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 josgomrom4&lt;br /&gt;
   marfruman1 hugrubsan enrparalv benber chrgencar *) &lt;br /&gt;
fun todos :: &amp;quot;(&amp;#039;a ⇒ bool) ⇒ &amp;#039;a list ⇒ bool&amp;quot; where&lt;br /&gt;
  &amp;quot;todos p [] = True&amp;quot; |&lt;br /&gt;
  &amp;quot;todos p (x#xs) = (p x ∧ todos p xs)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 3.3. Demostrar que todos los elementos de (copia n x) son&lt;br /&gt;
  iguales a x. &lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 josgomrom4&lt;br /&gt;
   hugrubsan enrparalv benber *) &lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  apply (induction n)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* Comentario: La demostración anterior falla para copia3. *)&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;todos (λy. y=x) (copia n x)&amp;quot;&lt;br /&gt;
  by (induction n) simp_all&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.1. Definir, recursivamente y sin usar (@), la función&lt;br /&gt;
     amplia :: &amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&lt;br /&gt;
  tal que (amplia xs y) es la lista obtenida añadiendo el elemento y al&lt;br /&gt;
  final de la lista xs. Por ejemplo,&lt;br /&gt;
     amplia [d,a] t = [d,a,t]&lt;br /&gt;
  ------------------------------------------------------------------ *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 josgomrom4&lt;br /&gt;
   marfruman1 hugrubsan enrparalv benber chrgencar *) &lt;br /&gt;
fun amplia :: &amp;quot;&amp;#039;a list ⇒ &amp;#039;a ⇒ &amp;#039;a list&amp;quot; where&lt;br /&gt;
  &amp;quot;amplia [] y = [y]&amp;quot; |&lt;br /&gt;
  &amp;quot;amplia (x#xs) y = x # amplia xs y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
text {* --------------------------------------------------------------- &lt;br /&gt;
  Ejercicio 4.2. Demostrar que &lt;br /&gt;
     amplia xs y = xs @ [y]&lt;br /&gt;
  ------------------------------------------------------------------- *}&lt;br /&gt;
&lt;br /&gt;
(* pabalagon cammonagu juacanrod alfmarcua raffergon2 josgomrom4 hugrubsan enrparalv benber chrgencar *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  apply (induction xs)&lt;br /&gt;
   apply auto&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
(* pabalagon *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  by (induction xs) simp_all&lt;br /&gt;
&lt;br /&gt;
(* marfruman1 *)&lt;br /&gt;
lemma &amp;quot;amplia xs y = xs @ [y]&amp;quot;&lt;br /&gt;
  by (induction xs) auto&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alikan</name></author>
		
	</entry>
</feed>